KoreDefo > お役立ち記事

財務モデルの色分けを 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 Function

3. 使い方

  1. まずブックを保存しておきます。マクロで変えた色は、Ctrl+Z で元に戻せません。
  2. Alt+F11 で VBA の画面を開き、「挿入」→「標準モジュール」を選んで、上のコードを貼り付けます。
  3. Excel に戻り、色分けしたいシートを選びます(Ctrl を押しながらシート見出しをクリックすると複数選べます)。
  4. Alt+F8 で「ColorCodeModel」を選んで「実行」を押します。
いろいろなブックで使うなら:マクロを入れたブックは「Excel マクロ有効ブック(.xlsm)」で保存する必要があります。提出するブックに入れたくない場合は、個人用マクロブック(PERSONAL.XLSB)に入れておくと、どのブックからでも呼び出せます。マクロの記録で「マクロの保存先」を「個人用マクロ ブック」にすると作られます。

4. コードのポイント

5. 注意点と、うまくいかない場合

毎回の確認を、ボタン1つに

マクロを使わずに済ませたい場合は、KoreDefo の「一括色分け」ボタンで、数値のセルを青・黒・緑のルールどおりにまとめて塗り直せます(.xlsm にする必要はなく、Web 版・Mac 版の Excel でも使えます。他ファイル参照の赤には対応していません)。「青字なのに数式」「黒字なのに数字が直接入っている」といったズレを見つけて一覧にすることもできます。

30日間無料で試すチェック項目の一覧を見る