引数 | 定数 | 説明 |
---|---|---|
What | ー | 検索する文字列を指定します。ワイルドカードも可能です。 |
After | ー | 検索を開始するセルを指定します。指定しない場合は、セル範囲してした一番左うえから検索を開始します。 |
LookIn | xlVaues(値) xlFormulas(数式) xlComments(コメント) | セルの値のみを検索するか、数式や関数の文字を検索するかを指定します。 |
LookAt | xlWhole(完全一致) xlPart(部分一致) | 検索値に対して、完全一致又は、部分一致を指定します。 |
SearchOrder | xlByRows(行方向) xlByColumns(列方向) | 行方向又は、列方向どちらを優先的に検索するかを指定します。 |
SearchDirection | xlNext(前方向) xlPrevious(後方向) | 検索する方向を指定します。 |
MatchCase | True(区別する) False(区別しない) | 大文字と小文字を区別するかを指定します。 |
MatchByte | True(区別する) False(区別しない) | 文字の全角と半角を区別するか指定します。 |
SearchFormat | True(オン) False(オフ) | 書式検索をオンにするかを指定します。 |
Sub Find00() '住所一部検索 Dim MyData, HitData As Range Dim SerachAdd As String Set MyData = Range("D2:D20") '検索範囲を指定「D列:住所」 SerachAdd = "東京" '検索文字として指定 Set HitData = MyData.Find(What:=SerachAdd, lookat:=xlWhole) 'D列「住所」の中から検索文字「東京」の部分一致(xlPart)で検索します。 If HitData Is Nothing Then '検索文字が無ければ、「該当データはありません」っと表示してプログラムを終了します。 MsgBox "該当データはありません" Exit Sub End If MsgBox "該当セルは" & HitData.Row - 1 & "行目にあります。" '検索文字が発見された行がメッセジーボックスとして表示されます。 End Sub
Sub Find01() '名前検索 Dim MyData, HitData As Range Dim SerachName As String Dim lRow As Long Do SerachName = InputBox("名前を入力して下さい。") '検索値(名前)を入力 Loop Until SerachName <> "" '名前が入力されたか確認 lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 Set MyData = Range("B2:B" & lRow) '検索範囲を指定 Set HitData = MyData.Find(What:=SerachName, lookat:=xlPart) '検索範囲から検索値を検索する。 If HitData Is Nothing Then '検索範囲から検索結果があるか確認する。 MsgBox "該当データはありません" Exit Sub End If Range("B" & HitData.Row).Interior.ColorIndex = 6 '検索された該当する名前の背景色を塗りつぶす。 End Sub
Sub Find() '複数検索 Dim NameData, AddData, HitName, HitAdd As Range Dim SerachName, SerachAdd As String Dim lRow, I, NameCnt, AddCnt As Long Do SerachName = InputBox("名前を入力して下さい。") '検索値(名前)を入力 SerachAdd = InputBox("都道府県名を入力して下さい。") '検索値(住所)を入力 Loop Until SerachName <> "" And SerachAdd <> "" '名前と都道府県名(文字)が入力されたか確認・入力されるまで繰り返す lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 For I = 2 To lRow '2行目から最終行まで繰り返す。 Set NameData = Range("B" & I & ":B" & I) '検索範囲を指定(名前) Set HitName = NameData.Find(What:=SerachName, Lookat:=xlPart) '検索範囲から検索値(名前:xlPart 部分一致)を検索する。 Set AddData = Range("D" & I & ":D" & I) '検索範囲を指定(住所) Set HitAdd = AddData.Find(What:=SerachAdd, Lookat:=xlPart) '検索範囲から検索値(住所:xlPart 部分一致)を検索する。 If HitName Is Nothing Then Else Range("B" & HitName.Row).Interior.ColorIndex = 7 '検索された該当する名前の背景色を塗りつぶす。 NameCnt = NameCnt + 1 End If If HitAdd Is Nothing Then Else Range("D" & HitAdd.Row).Interior.ColorIndex = 6 '検索された該当する住所の背景色を塗りつぶす。 AddCnt = AddCnt + 1 End If Next I Range("G2") = NameCnt '検索された名前の件数を代入 Range("G3") = AddCnt '検索された住所の件数を代入 End Sub
下記のプログラムは、下表のデータからFindNextメゾットを使って「血液型」の中から指定する血液型を入力して、入力文字「A」と完全一致したE列「血液型」の背景色を塗りつぶすサンプルプログラムです。今回は、FindNextを使って連続的に検索をする仕組みになっています。
Sub FindNext() '複数結果 Dim RData, HitBL As Range Dim SerachBl As String Dim lRow, i As Long Do SerachBl = InputBox("血液型を入力") '検索値(血液型)を入力 Loop Until SerachBl <> "" '性別と血液型(文字)が入力されたか確認・入力されるまで繰り返す lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得 Set RData = Range("E2:E" & lRow) '検索範囲を指定 Set HitBL = RData.Find(What:=SerachBl, Lookat:=xlWhole) '検索範囲から検索値(血液型:xlWhole 完全一致)を検索する。 If HitBL Is Nothing Then MsgBox "検索データがありません" Exit Sub Else Range("E" & HitBL.Row).Interior.ColorIndex = 6 '検索された該当する住所の背景色を塗りつぶす。 End If For i = 2 To lRow '2行目から最終行まで繰り返す。 Set HitBL = RData.FindNext(HitBL) '検索範囲から検索値(血液型:xlWhole 完全一致)を検索する。「次の検索」 If HitBL Is Nothing Then Else Range("E" & HitBL.Row).Interior.ColorIndex = 6 '検索された該当する住所の背景色を塗りつぶす。 End If Next i End Sub