あるセル範囲内において特定の情報を検索するには Find メソッドを使用します。Find メソッドは検索対象の情報が見つかるとその情報が含まれるセルオブジェクトを返し、1つも見つからなければNothingを返します。同じ検索を繰り返すときは、FindNext メソッドか、 FindPrevious メソッドを使用します。
Findメソッドの使用方法
引数名 | 省略 | 定数/データ型 | 説明 |
---|---|---|---|
What | × | Variant型 | 文字列などの検索データを指定します。 |
After | ○ | Variant型 | このセルの次のセルから検索が開始されます。 省略すると、対象セル範囲の左上端のセルが検索の開始点になります。 |
LookIn | ○ | xlValues | セルの値を検索対象とします。 |
xlFormulas | セルの数式を検索対象とします。 | ||
xlComments | セルのコメントを検索対象とします。 | ||
LookAt | ○ | xlWhole | 完全一致検索。 検索データが検索対象と完全一致した場合にのみセルオブジェクトを返却します。 |
xlPart | 部分一致検索。 検索データが検索対象と部分一致した場合でもセルオブジェクトを返却します。 | ||
SearchOrder | ○ | xlByRows | 行を横方向に検索してから、次の行に移動します。 |
xlByColumns | 列を下方向に検索してから、次の列に移動します。 | ||
SearchDirection | ○ | xlNext | 次の値を検索します。 |
xlPrevious | 前の値を検索します。 | ||
MatchCase | ○ | True | 大文字と小文字を区別して検索します。 |
False | 大文字と小文字を区別しないで検索します。 (既定値) | ||
MatchByte | ○ | True | 半角文字と全角文字を区別して検索します。 |
False | 半角文字と全角文字を区別しないで検索します。 | ||
SearchFormat | ○ | Variant型 | 検索の書式を指定します。 |
Findメソッドの使用例
次のサンプルマクロは、検索キーワードをInputBox関数で受け付け、現在表示されているシート内を部分一致で検索する例です。検索結果として該当セル数の表示と塗りつぶしを行います。
Sub sample6_42()
Dim myCell As Range
Dim keyWord As String
Dim firstAddress As String
Dim cnt As Long '自動的にゼロで初期化
'検索キーワードの受け付け
keyWord = InputBox("検索キーワードを入力してください。")
If keyWord = "" Then
'「キャンセル」か「×」ボタンが押下された場合
'または検索キーワードが未入力だった場合
MsgBox "検索をキャンセルしました。", vbExclamation
End '処理終了
End If
'現在表示されているシートの使用済みセル範囲を検索
With ActiveSheet.UsedRange
'背景色クリア
.Interior.ColorIndex = xlNone
'初回検索
Set myCell = .Find(What:=keyWord, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False)
'初回検索結果のチェック
If Not myCell Is Nothing Then
'初回検索セルのアドレスを退避
firstAddress = myCell.Address
'UsedRange内のセルを繰り返し検索
Do
'検索キーワードが見つかった場合
cnt = cnt + 1
myCell.Interior.Color = vbYellow
'Next検索
Set myCell = .FindNext(myCell)
Loop Until myCell.Address = firstAddress
End If
End With
'検索結果の表示
If cnt = 0 Then
MsgBox "検索キーワードなし", vbInformation
Else
MsgBox "検索が終了しました。" & String(2, vbLf) & _
"■検索キーワード -> " & keyWord & vbLf & _
"■該当セル数 -> " & cnt, _
vbInformation
End If
End Sub
ワークシート内の使用済み領域(UsedRange) Setステートメント
InputBox関数
MsgBox関数 Do…Loop
以下の図がテスト用データです。ワークシートに都道府県名が入力されている状態です。
マクロを実行すると、InputBoxが表示されるので、ここに”島”と入力します。
すると、その結果がメッセージボックスに表示され、シートの該当セルが黄色で塗りつぶされました。
次は”山”と入力してみます。