【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
ディスカッション
コメント一覧
まだ、コメントがありません