【ExcelVBA】セルの検索(.Findメソッド)

ExcelVBA, セルの操作

Findメソッドの構文とパラメータ

構文
式.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

パラメータ
引数定数説明
What検索するデータ
After検索を開始するセル
LookInxlFormulas検索対象を数式に指定
xlValues検索対象を値に指定
xlComents検索対象をコメントに指定
LookAtxlPart一部一致
xlWhole全部一致
SearchOrderxlByRows行方向に検索
xlByColumns列方向に検索
SearchDirectionxlNext前方に検索
xlPrevious後方に検索
MatchCaseTrue大文字と小文字を区別する
False大文字と小文字を区別しない
MatchByteTrue半角と全角を区別する
False半角と全角を区別しない
SearchFormatTrue書式を検索する
False書式を検索しない

使用例

完全一致検索

Sub Sample0()

  Dim KeyWord As String
  
  KeyWord = "みかん"
  
  MsgBox ThisWorkbook.ActiveSheet.Range("A:A").Find(KeyWord, LookAt:=xlWhole).row

End Sub

A列を下から上に向かって検索

Sub Sample1()

  Dim KeyWord As String
  
  KeyWord = "みかん"
  
  MsgBox ThisWorkbook.ActiveSheet.Range("A:A").Find(KeyWord, SearchDirection:=xlPrevious).row

End Sub

A1~C1を検索

Sub Sample2()

  Dim KeyWord As String
  
  KeyWord = "個数"
  
  MsgBox ThisWorkbook.ActiveSheet.Range("A1:C1").Find(KeyWord, SearchOrder:=xlByColumns).Column

End Sub

最初に見つかったセルに色を塗る

Sub Sample3()

  Dim KeyWord As String
  
  KeyWord = "みかん"
  
  ThisWorkbook.ActiveSheet.Range("A:A").Find(KeyWord, LookAt:=xlWhole).Interior.Color = RGB(255, 165, 0)

End Sub

最初に見つかったセルを選択する

Sub Sample4()

  Dim KeyWord As String
  
  KeyWord = "みかん"
  
  ThisWorkbook.ActiveSheet.Range("A:A").Find(KeyWord).Select

End Sub

全角半角を区別しない

Sub Sample5()

  Dim KeyWord As String
  
  KeyWord = "12月"
  
  MsgBox ThisWorkbook.ActiveSheet.Range("A1:L1").Find(KeyWord, MatchByte:=False).Column

End Sub

大文字小文字を区別しない

Sub Sample6()

  Dim KeyWord As String
  
  KeyWord = "vba"
  
  MsgBox ThisWorkbook.ActiveSheet.Range("A1:L1").Find(KeyWord, MatchCase:=False).Column

End Sub

検索で見つからなかった時のエラー停止を回避

問題のエラーメッセージ



'実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。
※該当データが見つからないときに、上記のメッセージが表示されて、マクロが停止します。

On Error GoTo 0 でマクロ停止を回避

Sub Sample7()

  Dim KeyWord As String
  KeyWord = "冒険の書"

  Dim Addr As String
  
  On Error Resume Next
  Addr = ThisWorkbook.ActiveSheet.Range("A1:Z100").Find(KeyWord, LookAt:=xlWhole).Address
  On Error GoTo 0

  If Addr = "" Then
    MsgBox "冒険の書は消滅しています!" '見つからなかった
  Else
    MsgBox "冒険の書が見つかりました!" '見つかった
    MsgBox "位置:" & Addr
  End If
  
End Sub
※On Error GoTo 0 でエラー処理ルーチンを無効にしています。

Rangeオブジェクトでマクロ停止を回避

Sub Sample8()

  Dim KeyWord As String
  KeyWord = "冒険の書"

  Dim Rng As Range
  Set Rng = ThisWorkbook.ActiveSheet.Range("A1:Z100").Find(KeyWord, LookAt:=xlWhole)
  
  If Rng Is Nothing Then
    MsgBox "冒険の書は消滅しています!" '見つからなかった
  Else
    MsgBox "冒険の書が見つかりました!" '見つかった
    MsgBox "行:" & Rng.row & "  列:" & Rng.Column
  End If
  
End Sub