【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