Excel VBAでFind 関数を使って検索する
Findは、Excelシート上の指定したセル範囲の中で、検索でヒットしたセルを取得します。
Find使用時に引数を指定することで全文一致か部分一致か条件を設定することができます。
また、検索方向を指定したり、「大文字と小文字」又は「半角と全角」を区別して検索が行えたりしますので柔軟な検索が行えます。
ただし、検索対象セルの値が式で表示されている場合は検索できませんので、VLookupやIndexとMatchを組み合わて検索するようにしましょう。
また、VLookupやIndexとMatchを組み合わた検索より処理速度が遅くなりますので、データ数が多い場合は注意が必要です。
Find メソッドを使って検索するサンプルアプリの説明
■ サンプルアプリの処理内容
右の黄色の表のNo を検索して、該当する氏名を左の表(赤枠)にセットします。
「Findの検索」ボタンをクリックすると右表のNoを検索してヒットした名前が赤枠にセットされます。
サンプルアプリのソースコード コードの作成手順はこちら
Sub ボタン1_Click()
'検索結果を入れるRange変数を定義
Dim Rng As Range
'検索してヒットした行番号を入れる変数を定義
Dim HitRow As Long
'ワークシートを指定する
Dim Sh1 As Worksheet
Set Sh1 = ThisWorkbook.Worksheets("Sheet1")
'変数を定義する
Dim workEndR1, workTmpR1 As Long, tmpStr1 As String
'データの最終行を取得する
workEndR1 = Sh1.Cells(Rows.Count, 2).End(xlUp).Row
'6行目からデータの最終行までループ
For workTmpR1 = 6 To workEndR1
'検索キーをセット
tmpStr1 = Sh1.Cells(workTmpR1, 2).Value
'Findメソッドで検索実行
Set Rng = Sh1.Range("F:F").Find(What:=tmpStr1, LookAt:=xlWhole)
'検索でヒットした場合は検索結果を名前欄にセットする。ヒットしなかった場合は無視する。
If Not (Rng Is Nothing) Then
'ヒットした行番号をセット
HitRow = Rng.Row
'検索結果をセットする
Sh1.Cells(workTmpR1, 3).Value = Sh1.Cells(HitRow, 7).Value
End If
Next
End Sub
Findメソッドの説明
Findメソッドは引数を設定することにより様々な検索を行えます。引数の使い方については下の説明表を参照して下さい。
Object.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 | 書式を検索しない |
Findメソッドと同じ検索機能を持つMatchメソッドの使い方やFindメソッドとの違いについては、下記リンク先をご覧ください。
https://scodebank.com/?p=1306
ディスカッション
コメント一覧
まだ、コメントがありません