
Excel VBA(マクロ)で絶対に知っておきたい重要テクニックといえば
セル検索(Find) です。
「指定した文字を含むセルを探したい!」
「検索結果をひとつずつ回したい!」
「目的の値がどこにあるのか分からない…」
そんな時に必ず使うのが Range.Find()。
手動の Ctrl+F を「マクロで自動化」できる、とても強力な関数です。
🌱 Find の基本形
まずは最もシンプルな使い方から。
Dim rng As Range
Set rng = Range("A1:A100").Find(What:="東京")
If Not rng Is Nothing Then
MsgBox rng.Address
End If
ポイントはひとつだけ:
✔ 結果が見つからない場合は Nothing になる
これを知らないとエラーになります。
🔎 Find の代表的な引数
| 引数 | 意味 | よく使う値 |
|---|---|---|
| What | 検索する文字列 | "東京" など |
| LookAt | 一致条件 | xlWhole(完全一致)、xlPart(一部一致) |
| MatchCase | 大文字小文字を区別するか | True/False |
| LookIn | 検索対象 | xlValues(値)、xlFormulas(数式) |
例:
Set rng = Range("A:A").Find( _
What:="ABC", _
LookAt:=xlWhole, _
MatchCase:=False _
)
🔁 複数のヒットをすべて回収する(これ最重要!)
実務的に一番よく使うのが、
FindNext とセットで“すべての一致セルを拾う”方法です。
Sub FindAllExample()
Dim firstAddress As String
Dim c As Range
With Range("A1:A100")
Set c = .Find("東京")
If Not c Is Nothing Then
firstAddress = c.Address
Do
Debug.Print c.Address ' ヒットしたセルを表示
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
ポイントはこれ👇
✔ 最初に見つけたセルのアドレスを保存する
FindNext は「ぐるっと一周」して戻ってくるため、firstAddress と比較してループ終了します。
Find の“分かりにくいポイントNo.1”といえばコレ。
🧩 部分一致で検索する例
Set c = Range("B:B").Find(What:="株式会社", LookAt:=xlPart)
📐 数値の検索でハマらないための注意点
数値検索は“文字列扱い”と“数値扱い”の違いでミスが起きやすいです。
' 数値として検索(3 と入力されているセル)
Set c = Range("A:A").Find(3)
' 文字列 "3" として検索("3" と入力されているセル)
Set c = Range("A:A").Find("3")
LookIn:=xlValues も付けると安定することが多いです。
📌 便利:Findの結果を色付けする
Sub ColorFind()
Dim c As Range
Dim first As String
With Range("A1:A200")
Set c = .Find("重要")
If Not c Is Nothing Then
first = c.Address
Do
c.Interior.Color = vbYellow
Set c = .FindNext(c)
Loop While c.Address <> first
End If
End With
End Sub
大量データのチェックに大活躍します✨
🛠 Findが見つからないときの原因まとめ
初心者がハマるポイントをサッとおさらい👇
-
LookAt が
xlWholeになっている
→ 一部一致にしたいならxlPart -
MatchCase が True になっている
→ 大文字小文字が区別される -
LookIn が逆(数式か値)
→ LookIn:=xlValues に変更 -
検索範囲が狭い
→ Range を見直すこと
Find はクセがありますが、
使いこなせれば“データ検索作業”が一気に自動化できます。