---
id: excel-macros
aliases: []
tags:
  - destiny/permanent
  - topic/software
  - type/guide
  - authorship/original
  - status/complete
title: Excel Macros
dg-publish: true
---
# Excel Macros

Excel macros are a poor solution for most problems,
however some simple formatting motions are a good fit.

This document is a step-by-step process for implementing such a macro,
assuming a fresh Excel install.

## 1. Enable Developer Tools

Add the hidden-by-default "Developer Tools" menu to the ribbon.

```menu
File > Options > Customize Ribbon
```

On the right side, under `Main Tabs`, check `Developer`.

From the new menu you can access macros and VB projects.

## 2. Create `PERSONAL.XLSB`

Create an empty macro in your "Personal Macro Workbook".

```menu
Developer > Code > Record Macro
```

Set `Store macro in:` to `Personal Macro Workbook`
and click `OK`, then `Stop Recording`.

This will create your `PERSONAL.XLSB` workbook,
a special workbook whose macros and other VB code
can be accessed from any other workbook.

## 3. Create a New Macro

```menu
Developer > Visual Basic
```

In the pop-up window, navigate to and double-click
`VBAProject (PERSONAL.XLSB)/Modules/Module1`

Erase the empty macro created in step 2
and add any custom macros here.
My favorite is provided below.

```vb
' Use on a column of empty and non-empty cells.
' Replace empty cells with the last non-empty cell's values
Sub FillDownEmptyCells()
    Dim rng As Range
    Dim cell As Range

    ' Check if a range is selected
    If Selection Is Nothing Then
        Exit Sub
    End If

    ' Set the selected range
    Set rng = Selection

    For Each cell In rng
        If IsEmpty(cell.Value) Then
            ' Copy cell above to empty cell
            cell.Value = cell.Offset(-1, 0).Value
        End If
    Next cell

End Sub
```

Use `Ctrl+S` or the save icon to save the edits
then close the Visual Basic window.
