📊 Excel VBA Top100
🔧

FindCellWithFormula

ユーティリティ

数式が含まれるセルを検索する

ワークシート内で数式が入力されているセルをVBAで検索・一覧化するマクロです。SpecialCells(xlCellTypeFormulas)を使って数式セルだけを一度に選択・処理できます。数式の種類(参照・演算・関数)でフィルタリングしたり、数式の内容をリストアップしてシートの構造を把握するドキュメント化ツールとして活用できます。エラー値(#VALUE!等)を含む数式の特定にも使えます。内部ではRange.SpecialCells(xlCellTypeFormulas)メソッドを使うことで、シート全体をループすることなく数式セルだけを瞬時に選択できます。CheckDependenciesと組み合わせれば、まず数式セルを洗い出し、その後それぞれの参照関係を追跡するという体系的な監査フローが構築できます。

FindCellWithFormula デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行すると数式を含むセルが一覧表示され、該当セルにジャンプできる

🎯 活用シーン

  • ✓シート引継ぎ時に数式セルを一覧化して計算ロジックをドキュメント化
  • ✓エラー値を返している数式セルをすべて特定して修正対象リストを作成
  • ✓数式と値混在データの整合性チェックで数式セルの位置を確認
  • ✓他部署から引き継いだブックで、どのセルに数式が生きているかを素早く把握したいとき
  • ✓決算シートの数式セルをすべて洗い出し、外部監査人への説明資料として一覧化したいとき

💡 実装のヒント

  • ▸SpecialCells(xlCellTypeFormulas) で数式セルを一括選択できます
  • ▸xlCellTypeFormulasにxlErrors等を組み合わせてエラー数式を絞り込めます
  • ▸HasFormula プロパティでセルに数式があるかを個別チェックできます
  • ▸エラー値を返す数式だけに絞りたい場合は、SpecialCellsの第2引数にxlErrorsを指定して組み合わせてください。
  • ▸数式セルの一覧を出力する際は、Cell.Formula(数式文字列)とCell.Value(計算結果)の両方を記録しておくと後の検証が容易になります。

💻 VBAコード

' FindCellWithFormula
' -----------------
' Macro Name: FindCellWithFormula
' Description: 数式が含まれるセルを検索する
' Parameters: なし
' Returns: なし
' Usage: 実行すると数式を含むセルが一覧表示され、該当セルにジャンプできる
' -----------------

Sub FindCellWithFormula()
    Dim ws As Worksheet
    Dim foundCells As Collection
    Dim cell As Range
    Dim formulaCells As String
    Dim outputWs As Worksheet
    Dim outputRow As Long
    Dim i As Long

    On Error GoTo ErrorHandler

    Set ws = ActiveSheet
    Set foundCells = New Collection

    For Each cell In ws.UsedRange
        If cell.HasFormula Then
            foundCells.Add cell
        End If
    Next cell

    If foundCells.Count = 0 Then
        MsgBox "数式が含まれるセルは見つかりませんでした。", vbInformation
        Exit Sub
    End If

    Set outputWs = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    outputWs.Name = "数式検索_" & Format(Now, "hhnnss")

    outputWs.Cells(1, 1).Value = "数式セル一覧"
    outputWs.Cells(1, 1).Font.Bold = True
    outputWs.Cells(1, 1).Font.Size = 14

    outputWs.Cells(2, 1).Value = "シート: " & ws.Name
    outputWs.Cells(3, 1).Value = "検索結果: " & foundCells.Count & " 件"

    outputWs.Cells(5, 1).Value = "行"
    outputWs.Cells(5, 2).Value = "列"
    outputWs.Cells(5, 3).Value = "アドレス"
    outputWs.Cells(5, 4).Value = "数式"
    outputWs.Cells(5, 1).Font.Bold = True
    outputWs.Cells(5, 2).Font.Bold = True
    outputWs.Cells(5, 3).Font.Bold = True
    outputWs.Cells(5, 4).Font.Bold = True
    outputWs.Range(outputWs.Cells(5, 1), outputWs.Cells(5, 4)).Interior.Color = RGB(200, 200, 200)

    outputRow = 6
    For i = 1 To foundCells.Count
        Set cell = foundCells(i)
        outputWs.Cells(outputRow, 1).Value = cell.Row
        outputWs.Cells(outputRow, 2).Value = cell.Column
        outputWs.Cells(outputRow, 3).Value = cell.Address
        outputWs.Cells(outputRow, 4).Value = cell.Formula
        outputRow = outputRow + 1
    Next i

    outputWs.Columns("A:D").AutoFit
    outputWs.Select

    MsgBox foundCells.Count & " 件の数式セルが見つかりました。", vbInformation
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub