
エクセルファイル内に自分の名前が入っていたら対応が必要になるんだけど、
いちいち検索するのがめんどうだから、マクロで一瞬にして検索できないかな?

なるほど…。
では今回は、「エクセルシート内を検索するマクロの作り方」を
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
エクセルシート内を検索するマクロの作り方【完全一致】
「Find」を使います。
まずは実行見本をどうぞ。
実行見本
ひとまず全コードと実行結果をご覧ください。
解説は後ほど行います。
全コード
下記は、エクセルシート内を「Utatane」というワードで完全一致検索するVBAマクロの例です。
今回は検索がHITすると、そのセルを黄色で塗りつぶししています。
Sub 完全一致検索()
Dim ws As Worksheet
Dim searchText As String
Dim searchRange As Range
Dim foundCell As Range
Dim firstAddress As String
Set ws = ThisWorkbook.Sheets(1)
searchText = "Utatane"
Set searchRange = ws.UsedRange
Set foundCell = searchRange.Find(What:=searchText, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
firstAddress = foundCell.Address
Do
foundCell.Interior.Color = RGB(255, 255, 0)
Set foundCell = searchRange.FindNext(foundCell)
Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress
Else
MsgBox "指定した文字列は見つかりませんでした。"
End If
End Sub
実行結果

解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
プロシージャの作成
Sub 完全一致検索()
End Sub
プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。
変数の宣言
Dim ws As Worksheet
Dim searchText As String
Dim searchRange As Range
Dim foundCell As Range
Dim firstAddress As String
コードの2行目~6行目にて、以降使う変数の宣言を行っております。
変数や宣言については、下記記事をご参考ください。
検索対象のシートを設定
Set ws = ThisWorkbook.Sheets(1)
上記コードにて、検索対象のシートを設定しています。
今回は1番左のシートを指定しています。
シート名を指定する場合は “Sheet1” のように変更してください。
検索する文字列を設定
searchText = "Utatane"
上記コードにて、検索ワードを設定しています。
変数に入った文字列や数値を設定することも可能です。
検索する範囲を設定
Set searchRange = ws.UsedRange
上記コードにて、検索範囲を設定しています。
今回はシート全体を指定しています。
検索開始
Set foundCell = searchRange.Find(What:=searchText, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
firstAddress = foundCell.Address
Do
foundCell.Interior.Color = RGB(255, 255, 0)
Set foundCell = searchRange.FindNext(foundCell)
Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress
Else
MsgBox "指定した文字列は見つかりませんでした。"
End If
上記コードにて、範囲内を検索しています。
- 検索ワードがHIT:全て黄色に塗りつぶし
- 検索ワードが1つもない:「指定した文字列は見つかりませんでした」と表示
セルの塗りつぶし方法は下記記事で解説しております。ご参考ください。
検索でHITしたセルの文字を削除したい場合は、16~18行目を下記のように変更してください。
foundCell.Value = ""
Set foundCell = searchRange.FindNext(foundCell)
Loop While Not foundCell Is Nothing
以上が完全一致検索VBAマクロです。
ボタンを押してマクロを実行させることも可能です。
ボタンの作り方は、下記記事でわかりやすく解説しております。
完全一致ではなく、部分一致で検索したい場合もあるかと思います。
次項で解説いたします。
エクセルシート内を検索するマクロの作り方【部分一致】
Sub 部分一致検索()
Dim ws As Worksheet
Dim searchText As String
Dim searchRange As Range
Dim foundCell As Range
Dim firstAddress As String
Set ws = ThisWorkbook.Sheets(1)
searchText = "Utatane"
Set searchRange = ws.UsedRange
Set foundCell = searchRange.Find(What:=searchText, LookIn:=xlValues, LookAt:=xlPart)
If Not foundCell Is Nothing Then
firstAddress = foundCell.Address
Do
foundCell.Interior.Color = RGB(255, 255, 0)
Set foundCell = searchRange.FindNext(foundCell)
Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress
Else
MsgBox "指定した文字列は見つかりませんでした。"
End If
End Sub
上記が部分一致で検索するVBAマクロコードです。
12行目の最後以外は前項と同じです。
- 完全一致:LookAt:=xlWhole
- 部分一致:LookAt:=xlPart
これで、「Utatane01」というワードも検索でHITするようになりました。

うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
エクセルシート内を検索するマクロを解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!