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

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(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