Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ入門】Findでセル検索を極める!初心者でも迷わない使い方と実践例

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)

 

 
“株式会社ABC”、“ABC株式会社” どちらでもヒットします。

📐 数値の検索でハマらないための注意点

数値検索は“文字列扱い”と“数値扱い”の違いでミスが起きやすいです。

 
' 数値として検索(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 はクセがありますが、
使いこなせれば“データ検索作業”が一気に自動化できます。