Est. 1993 Beginner

VBAMacro for Excel

The Excel dialect of Visual Basic for Applications — the macro language that turned the world's most popular spreadsheet into a programmable platform in 1993.

Created by Microsoft

Paradigm Multi-paradigm: Procedural, Event-Driven, Object-Based
Typing Static with dynamic Variant type, Weak
First Appeared 1993
Latest Version VBA 7.1 (2013, still current)

VBAMacro for Excel — Excel’s dialect of Visual Basic for Applications — is the macro language that made the world’s most widely used spreadsheet programmable. When Microsoft shipped it in Excel 5.0 in 1993, Excel became the first application to host VBA, pairing the approachable syntax of Visual Basic with an object model in which Workbooks, Worksheets, and Range objects are first-class citizens. A user could write Range("A1").Value = 42 and drive the spreadsheet from code, or press a record button and watch Excel write the code for them. The result was arguably the most successful end-user programming environment in history: a full language, editor, and debugger hiding behind Alt+F11 in nearly every copy of Excel for Windows shipped over three decades.

This page covers VBA as it lives inside Excel specifically; the broader story of the language across Office and licensed third-party hosts is told on the VBA page.

History and Origins

Excel had macros before it had VBA. From its early versions the spreadsheet included XLM, the “Excel 4.0 macro” language, in which programs were written as columns of function-like commands on special macro sheets. XLM was powerful but idiosyncratic — programming disguised as formulas — and it was incompatible with the macro languages in Microsoft’s other applications, such as Word’s WordBasic.

Standalone Visual Basic (1991) showed Microsoft a better path: BASIC’s forgiving syntax could bring Windows programming to a mass audience. VBA was the plan to embed that language inside the applications themselves, and Excel 5.0 in 1993 was the proving ground — the first Microsoft product to ship VBA. The combination was immediately compelling. Excel’s grid supplied the user interface and the data store; VBA supplied the logic; and the macro recorder translated a user’s clicks and keystrokes into readable VBA code, giving millions of spreadsheet users a gentle, inspectable on-ramp to programming. XLM remained supported for compatibility, but new macro development moved to VBA almost overnight, and Excel’s success with the language led Microsoft to roll VBA out across Office — Project in 1994, Access in 1995, and the whole suite with Office 97.

Design Philosophy

Excel VBA is a hosted language: a macro has no standalone existence, but lives inside a workbook (or the user’s personal macro workbook) and runs in-process inside Excel, manipulating the application through its COM object model. Several principles follow:

  • The spreadsheet is the framework. The language itself is small; the power lives in Excel’s object model. Application, Workbook, Worksheet, Range, Chart, and PivotTable objects expose essentially everything a user can do by hand — and macros are, at heart, recorded or hand-written sequences of those same actions.
  • Recordability first. The macro recorder means an Excel user never has to start from a blank page. Record an action, read the generated code, generalize it with a loop or a variable, and you have slid from user to programmer without noticing the boundary.
  • Events make workbooks reactive. Code attaches to worksheet and workbook events — Workbook_Open, Worksheet_Change, a button click — so a spreadsheet can validate entries, refresh data, or enforce workflow as the user works.
  • Forgiveness over rigor. Variables need no declaration unless Option Explicit is set, the Variant type holds anything, and conversions are implicit. Small macros are effortless; large macro codebases demand discipline the language does not enforce.

Key Features

Two idioms define everyday Excel VBA. The first is the automation macro — a Sub that manipulates workbooks:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Option Explicit

Sub FlagOverdueInvoices()
    Dim ws As Worksheet
    Dim cell As Range

    Set ws = ThisWorkbook.Worksheets("Invoices")

    For Each cell In ws.Range("D2:D" & ws.Cells(ws.Rows.Count, "D").End(xlUp).Row)
        If IsDate(cell.Value) And cell.Value < Date Then
            cell.EntireRow.Interior.Color = vbYellow
        End If
    Next cell
End Sub

The second is the user-defined function (UDF) — a Function callable straight from a worksheet cell, extending Excel’s formula language itself:

1
2
3
4
Function CircleArea(radius As Double) As Double
    CircleArea = radius * radius * 3.14159265358979
End Function
' In a cell:  =CircleArea(A1)

Beyond these, Excel VBA offers class modules with properties and events, UserForms for custom dialogs, On Error handling in the classic BASIC style, COM automation of other applications (an Excel macro can drive Word or Outlook via CreateObject), and Declare statements for calling Windows API functions directly — a power that has served both engineers and malware authors.

Evolution

The language matured quickly and then froze deliberately. Excel 97 brought VBA 5.0 and the integrated Visual Basic Editor; VBA 6.0 followed with Office 2000. VBA 7.0 (Office 2010) existed chiefly to support 64-bit Excel, adding the LongLong type and PtrSafe declarations, and VBA 7.1 (Office 2013) remains the shipping version more than a decade later. Stability became the feature: a macro written against Excel 97’s object model very often still runs today.

The security story evolved far more than the language did. Because a workbook could carry executable code, Excel became a malware vector early — Laroux, found in July 1996, was the first Excel macro virus, spreading itself through the PERSONAL.XLS startup workbook. Microsoft’s countermeasures accumulated over the years: macro security levels, the .xlsx/.xlsm split in Excel 2007 (so a file’s extension declares whether it can contain macros), the default disabling of legacy XLM macros in October 2021, and finally the decision — announced in February 2022 and enforced from July 27, 2022 — to block VBA macros outright in files downloaded from the internet. Excel VBA also survived a platform scare: Office 2008 for Mac dropped VBA entirely, and user outcry helped bring it back in Office for Mac 2011.

Current Relevance

Excel VBA today is officially superseded and practically indispensable. Microsoft steers new automation toward Office Scripts (TypeScript-based, and unlike VBA able to run in Excel on the web and in Power Automate flows) and, since its August 2023 announcement, Python in Excel; VBA does not run in Excel on the web or on mobile. Yet the installed base is enormous. Decades of business-critical logic live in .xlsm workbooks across finance, insurance, engineering, accounting, and government, and organizations maintain and extend that code because it runs the business. Microsoft has repeatedly affirmed that VBA will remain in desktop Excel, and “Excel VBA developer” persists as a hiring category — remarkable for a language whose last feature release accompanied Office 2013.

Why It Matters

VBA in Excel is the definitive case study in end-user programming. By embedding a real language behind a macro recorder in the world’s dominant spreadsheet, Microsoft turned millions of accountants, analysts, actuaries, and engineers into programmers — most without ever intending to become one. It demonstrated that an application could be a programmable platform, a pattern that echoes through every scriptable app and plugin ecosystem since. And its long twilight teaches a durable lesson about software gravity: a language woven into critical workflows does not retire on the vendor’s schedule. More than thirty years after Excel 5.0 taught a spreadsheet to program itself, an unquantifiable but enormous share of the world’s business logic still executes, one macro at a time, inside Excel.

Timeline

1992
Excel 4.0 ships with the XLM macro-sheet language, the formula-style predecessor that VBA would soon replace as Excel's automation tool
1993
Excel 5.0 becomes the first Microsoft application to ship Visual Basic for Applications, embedding a real programming language and the Excel object model directly in the spreadsheet
1996
Laroux, the first Excel macro virus, is found in the wild in July — a self-replicating VBA macro that spreads through the PERSONAL.XLS startup workbook
1997
Excel 97 ships VBA 5.0 and the integrated Visual Basic Editor (VBE), giving Excel macro authors a full IDE with debugger, code completion, and UserForm designer
1999
VBA 6.0 arrives with Office 2000, adding support for COM add-ins and modeless forms
2007
Excel 2007 introduces the Open XML file formats, splitting macro-free .xlsx from macro-enabled .xlsm so a workbook's file extension reveals whether it can carry VBA code
2008
Office 2008 for Mac ships without VBA, stranding cross-platform Excel macros until Office for Mac 2011 restores the language
2010
Office 2010 brings VBA 7.0 with 64-bit Excel support, adding the LongLong type and PtrSafe declarations for Windows API calls
2013
VBA 7.1 ships with Office 2013 and remains the current version of the language through Office 2016, 2019, 2021, 2024, and Microsoft 365
2021
Microsoft disables the legacy Excel 4.0 (XLM) macro language by default in October, leaving VBA as the only macro language enabled in a standard Excel install
2022
VBA macros in files downloaded from the internet are blocked by default; after an announcement in February and a brief pause, the rollout is enforced from July 27, 2022
2023
Microsoft announces Python in Excel in August, adding a second in-grid programming language while affirming continued VBA support in desktop Excel

Notable Uses & Legacy

Investment banking and trading desks

Excel VBA is the workhorse of financial modeling — analysts automate pricing models, risk reports, and data refreshes as workbook macros, and for many finance professionals VBA is the first programming language they ever learn.

Actuarial and insurance work

Insurers and actuarial teams have decades of reserving, pricing, and valuation models built as macro-enabled workbooks, many still maintained in production because they encode hard-won business logic.

Accounting and audit automation

Accounting departments and audit firms use Excel macros to automate month-end close checklists, reconciliations, and workpaper formatting — repetitive spreadsheet tasks that the macro recorder makes easy to script.

Engineering and laboratory data processing

Engineers and scientists use VBA to reduce instrument data, batch-process measurement workbooks, and build custom worksheet functions (UDFs) for domain calculations that built-in Excel formulas cannot express.

Small-business line-of-business tools

Countless invoicing, inventory, scheduling, and quoting systems exist as macro-enabled Excel workbooks — end-user-built applications where the spreadsheet grid doubles as the user interface and the database.

Language Influence

Influenced By

Visual Basic BASIC

Influenced

LibreOffice Basic

Running Today

Run examples using the official Docker image:

docker pull
Last updated: