財務モデルの色分けを VBA で自動化する方法
色分けを手で整えるのは、シートが増えるほど大変です。手動の手順をそのままマクロにすれば、ボタン1つで全シートの色をそろえられます。コピーしてすぐ使えるサンプルと、その仕組みを紹介します。
更新日:2026年10月26日
1. このマクロがやること
| セル | 色 | 見分け方 |
|---|---|---|
| 手で入力した数字 | 青 | 「条件を選択してジャンプ」の「定数」+「数値」と同じ |
| 計算式 | 黒 | 「数式」+「数値」と同じ |
| ほかのシートを参照する式 | 緑 | 数式に ! が入っている |
| ほかのファイルを参照する式 | 赤 | 数式に [ブック名]シート名! の形が入っている |
対象は数値が入ったセルだけです。見出しなどの文字のセルは変えません。選んでいるシート(複数選択も可)に対して実行します。
2. サンプルコード
Option Explicit
' 財務モデルの色分け
' 青 = 手入力の数値 / 黒 = 計算式 / 緑 = 他シート参照 / 赤 = 他ファイル参照
' 対象:選択中のシート(複数選択可)の、数値が入ったセルだけ
Sub ColorCodeModel()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ActiveWindow.SelectedSheets
ColorCodeSheet ws
Next ws
Application.ScreenUpdating = True
MsgBox "色分けが終わりました。", vbInformation
End Sub
Private Sub ColorCodeSheet(ws As Worksheet)
Dim inputs As Range, formulas As Range, c As Range, f As String
' 数値の定数と、結果が数値の数式を集める(無ければ Nothing のまま)
On Error Resume Next
Set inputs = ws.UsedRange.SpecialCells(xlCellTypeConstants, xlNumbers)
Set formulas = ws.UsedRange.SpecialCells(xlCellTypeFormulas, xlNumbers)
On Error GoTo 0
If Not inputs Is Nothing Then inputs.Font.Color = RGB(0, 0, 255) ' 青
If formulas Is Nothing Then Exit Sub
For Each c In formulas.Cells
f = c.Formula
If RefersToOtherFile(f) Then
c.Font.Color = RGB(255, 0, 0) ' 赤:他ファイル参照
ElseIf InStr(f, "!") > 0 Then
c.Font.Color = RGB(0, 128, 0) ' 緑:他シート参照
Else
c.Font.Color = RGB(0, 0, 0) ' 黒:計算式
End If
Next c
End Sub
' 他ファイル参照は「[ブック名]シート名!」の形(保存前のブックは拡張子なし)。
' テーブルの構造化参照「テーブル1[列]」は ] のすぐ後がシート名と ! にならないので区別できる
Private Function RefersToOtherFile(ByVal f As String) As Boolean
Const STOPS As String = "()[],;+-*/&=<>^"""
Dim p As Long, i As Long, ch As String
p = InStr(f, "]")
Do While p > 0
For i = p + 1 To Len(f)
ch = Mid$(f, i, 1)
If ch = "!" Then
If i > p + 1 Then RefersToOtherFile = True: Exit Function
Exit For
End If
If InStr(STOPS, ch) > 0 Then Exit For
Next i
p = InStr(p + 1, f, "]")
Loop
End Function3. 使い方
- まずブックを保存しておきます。マクロで変えた色は、Ctrl+Z で元に戻せません。
- Alt+F11 で VBA の画面を開き、「挿入」→「標準モジュール」を選んで、上のコードを貼り付けます。
- Excel に戻り、色分けしたいシートを選びます(Ctrl を押しながらシート見出しをクリックすると複数選べます)。
- Alt+F8 で「ColorCodeModel」を選んで「実行」を押します。
いろいろなブックで使うなら:マクロを入れたブックは「Excel マクロ有効ブック(.xlsm)」で保存する必要があります。提出するブックに入れたくない場合は、個人用マクロブック(PERSONAL.XLSB)に入れておくと、どのブックからでも呼び出せます。マクロの記録で「マクロの保存先」を「個人用マクロ ブック」にすると作られます。
4. コードのポイント
- SpecialCells は、手動の「条件を選択してジャンプ」と同じ機能です。
xlCellTypeConstants, xlNumbersが「定数・数値」、xlCellTypeFormulas, xlNumbersが「数式・数値」にあたります。セルを1つずつ調べるより速く、文字のセルを自然に外せます。 - 対象のセルが1つもないと SpecialCells はエラーになるので、
On Error Resume Nextで受け止めて、空なら飛ばしています。 - 他ファイル参照は
[ブック名.xlsx]シート名!A1の形になります。保存前のブック([Book1]Sheet1!A1)や CSV を参照していると拡張子が付かないので、拡張子ではなく「] のすぐ後にシート名と ! が続くか」で見分けています(RefersToOtherFile)。[があるかだけで判定すると、テーブルの構造化参照(テーブル1[売上])まで赤になってしまうためです。 - 他ファイル参照の式にも
!が入るので、赤の判定を先にしています。
5. 注意点と、うまくいかない場合
- 名前の定義を通した参照(例:
=売上合計が別シートを指している)や、INDIRECT で組み立てた参照は、数式に!が出てこないので黒になります。 - 数式の中の文字(
="合計!"など)に!があると、緑と判定されます。 - 保護されたシートでは書式を変えられないため、エラーになります。先に保護を解除してください。
- 色の値はチームのルールに合わせて変えてください(例:青を
RGB(0, 112, 192)にするなど)。
毎回の確認を、ボタン1つに
マクロを使わずに済ませたい場合は、KoreDefo の「一括色分け」ボタンで、数値のセルを青・黒・緑のルールどおりにまとめて塗り直せます(.xlsm にする必要はなく、Web 版・Mac 版の Excel でも使えます。他ファイル参照の赤には対応していません)。「青字なのに数式」「黒字なのに数字が直接入っている」といったズレを見つけて一覧にすることもできます。
30日間無料で試すチェック項目の一覧を見る