Skip to content
Learni
View all tutorials
VBA & Automatisation

How to Create a VBA Amortization Table in 2026

Lire en français

Introduction

In 2026, amortization tables remain a cornerstone of analytical accounting, essential for valuing fixed assets under IFRS 16 and PCG standards. A VBA amortization table automates the calculation of annual depreciation charges, cumulatives, and net book values, eliminating manual errors over asset lives that can exceed 20 years. Unlike static Excel formulas, a dynamic VBA approach handles variable scenarios like useful life revisions or partial disposals with penny-perfect precision.

This expert tutorial focuses on pure theory: conceptual structures, mathematical algorithms, and implementation best practices. Imagine a €100,000 asset depreciated linearly over 5 years; VBA recalculates instantly if the life extends to 7 years, preserving balance sheet integrity. For CFOs and management controllers, mastering this optimizes depreciation provisions and streamlines audits. We progress from theoretical basics to complex cases like declining balance with a linear switchover.

Prerequisites

  • Advanced Excel mastery (pivot tables, array formulas).
  • Intermediate VBA knowledge (loops, Range objects, UserForms).
  • Solid accounting fundamentals (fixed assets, PCG article 214-1, IFRS 16).
  • Excel 365 or 2021 with ActiveX enabled for secure macros.

Foundations: Understanding Depreciation Methods

Amortization tables model an asset's value loss over its useful life (UL). Straight-line method: Constant annual charge = (Acquisition cost - Residual value) / UL. Real-world example: €50,000 asset, €5,000 residual, 4-year UL → €11,250/year.

YearChargeCumulativeNBV
---------------------------------
111,25011,25038,750
211,25022,50027,500
311,25033,75016,250
411,25045,0005,000
Declining balance method: Charge = Beginning NBV × Rate (max 2-3× straight-line). French tax advantage (Balayer depreciation). Auto-switch to straight-line if declining underperforms in final 2 years (PCG rule).

Analogy: Straight-line like uniform wear (car), declining like tech obsolescence (smartphone).

Step 1: Model the Data Structure

Design a matrix architecture to scale to 1,000+ assets. Use a 2D array: rows = years (max UL 40), columns = Asset ID, Acquisition cost, UL, Rate, Method.

Case study: Portfolio of 5 industrial machines.

AssetAcq. €ULRate %Method
-------------------------------------
M1120k1020Decl.
M280k5-Straight
Store in a hidden 'Data' sheet for isolation. VBA iterates: For each asset, generate rows per year with vectorized formulas (MIN/MAX for bounds). Pitfall: Ignoring residual value leads to over-depreciation (tax violation).

Step 2: Advanced Mathematical Algorithms

Vectorized straight-line: Charge_n = (Acq. - Residual) / UL; Cumulative_n = n × Charge; NBV_n = Acq. - Cumulative_n.

Declining with switchover:

  1. Rate = MIN(3 × (1/UL), 50% fiscal cap).
  2. For year n: Charge_n = NBV_{n-1} × Rate.
  3. If remaining straight-line charge > declining over final 2 years → Switch.

Numeric example (€100k asset, 5-year UL, 30% rate):

YearBeg. NBVDecl. ChargeEnd NBV
----------------------------------------
1100,00030,00070,000
270,00021,00049,000
| 3 | 49,000 | 14,700 | 34,300 | ← Switch if straight >14,700

Integrate prospective revisions: If UL changes in year 3, recalculate from current NBV (IFRS requirement).

Step 3: Handling Complex Scenarios

Partial disposal: Pro-rata temporis on elapsed UL. Formula: Partial amort. = (Days owned / 365) × Annual charge.

Revaluation: Apply INSEE index or appraisal; adjust new acquisition cost, depreciate over remaining UL.

Grouped multi-assets: Use weighting for pools (buildings). Checklist:

  • Validate consistency: Total charges = Acq. - Residual.
  • Handle rounding: Use ROUND(Charge, 2) + final adjustment.

Real case: Leased vehicle fleet (IFRS 16) → Incorporate variable leases as amortizable add-ons.

Step 4: Reporting and Audit Integration

Dynamic outputs: 'Report' sheet with Slicers to filter by method/UL. Charts: NBV curve vs. time (linear combo).

Traceability: Log every recalc ( 'AuditTrail' sheet) with Timestamp, User, Changes.

Performance: For 10k rows, pre-compute in VBA arrays (avoid Range loops). Test 1M iterations: <5s target.

Best Practices

  • Modularity: Separate functions (CalcStraight(), CalcDeclining()) for multi-project reuse.
  • Input validation: Check Acq. >0, UL >1, Rate <100%; return custom errors.
  • Security: Protect data sheets (xlVeryHidden), sign VBA macros.
  • Scalability: Parameterize via Named Ranges or JSON-like strings for accounting imports.
  • Compliance: Add PCG/IFRS toggles; document assumptions in headers.

Common Errors to Avoid

  • Over-depreciation: Forgetting residual value → Excess provisions (URSSAF penalty).
  • Cumulative rounding: Unrounded charges cause >€1 final discrepancies (audit rejection).
  • No declining switch: PCG violation → 1.5% revenue fines.
  • Inefficient loops: Range(i=1 to 10000) without arrays → Excel freeze on large portfolios.

Next Steps

Deepen your skills with our advanced VBA training at Learni. Resources:


Experiment with a prototype: Download free Excel template via Learni Dev.