【ExcelVBA】セルの検索(.Findメソッド)
目次
Findメソッドの構文とパラメータ
構文式.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
パラメータ
| 引数 | 定数 | 説明 |
|---|---|---|
| What | - | 検索するデータ |
| After | - | 検索を開始するセル |
| LookIn | xlFormulas | 検索対象を数式に指定 |
| xlValues | 検索対象を値に指定 | |
| xlComents | 検索対象をコメントに指定 | |
| LookAt | xlPart | 一部一致 |
| xlWhole | 全部一致 | |
| SearchOrder | xlByRows | 行方向に検索 |
| xlByColumns | 列方向に検索 | |
| SearchDirection | xlNext | 前方に検索 |
| xlPrevious | 後方に検索 | |
| MatchCase | True | 大文字と小文字を区別する |
| False | 大文字と小文字を区別しない | |
| MatchByte | True | 半角と全角を区別する |
| False | 半角と全角を区別しない | |
| SearchFormat | True | 書式を検索する |
| 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




ディスカッション
コメント一覧
まだ、コメントがありません