VBAでキーワードの行番号を取得する方法|Find関数の使い方を徹底解説

Excelの自動化に欠かせないVBA。中でも「キーワードを探して、その行番号を取得したい」という場面はよくあります。例えば、リストの中から特定の値を見つけて処理をしたい、データの整合性をチェックしたいときなどに便利です。
本記事では、VBAのFindメソッドを使って、指定したキーワードが含まれるセルを探し、その行番号を取得する方法をわかりやすく解説します。初心者の方にも理解しやすいよう、サンプルコード付きで丁寧に説明していきますので、ぜひ参考にしてください。


VBAのFindメソッドとは?

VBAでセルの中から特定の値を検索したい場合、最もよく使われるのがRange.Findメソッドです。これは、指定した範囲内から検索キーワードを見つけて、最初にヒットしたセルを返してくれます。

構文は次のようになります。

RangeObject.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, SearchFormat)

多くの引数がありますが、必須なのはWhat(検索するキーワード)だけです。他は必要に応じて使えば問題ありません。


基本的な使い方:キーワードの行番号を取得する

実際に、キーワードを検索してその行番号を取得するサンプルコードを見てみましょう。

Sub FindKeywordRow()
Dim ws As Worksheet
Dim keyword As String
Dim rng As Range
Dim foundCell As Range

Set ws = ThisWorkbook.Sheets("Sheet1") ' 対象のシートを指定
keyword = "売上高" ' 探したいキーワード
Set rng = ws.Range("A1:A100") ' 検索範囲を指定

Set foundCell = rng.Find(What:=keyword, LookIn:=xlValues, LookAt:=xlWhole)

If Not foundCell Is Nothing Then
MsgBox "キーワード '" & keyword & "' は " & foundCell.Row & " 行目にあります。"
Else
MsgBox "キーワード '" & keyword & "' は見つかりませんでした。"
End If
End Sub

このコードでは、シート「Sheet1」のA1からA100の範囲で「売上高」という文字列を探し、見つかった場合はその行番号を表示しています。


LookAt引数の違いに注意しよう

Findメソッドでは、LookAt引数にxlWholexlPartを指定することができます。

  • xlWhole:完全一致(セル全体が一致する場合)
  • xlPart:部分一致(セルの一部にキーワードが含まれていれば一致)

例えば「売上高」というキーワードを検索する場合、セルに「売上高合計」と入っていたらxlWholeではヒットしませんが、xlPartならヒットします。


大文字・小文字を区別する方法

MatchCase:=Trueと指定することで、大文字・小文字を区別した検索が可能になります。

Set foundCell = rng.Find(What:=keyword, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)

これを指定しないと、たとえば「Keyword」と「keyword」は区別されません。


検索方向を指定する

検索の方向は、SearchDirection引数で指定できます。

  • xlNext:次のセル(下方向または右方向)
  • xlPrevious:前のセル(上方向または左方向)
Set foundCell = rng.Find(What:=keyword, SearchDirection:=xlNext)

通常はxlNextで問題ありません。


検索結果を繰り返し処理したいときは?

同じキーワードが複数ある場合、ループ処理を使ってすべての行番号を取得できます。

Sub FindAllKeywordRows()
Dim ws As Worksheet
Dim keyword As String
Dim rng As Range
Dim firstAddress As String
Dim foundCell As Range

Set ws = ThisWorkbook.Sheets("Sheet1")
keyword = "売上高"
Set rng = ws.Range("A1:A100")

Set foundCell = rng.Find(What:=keyword, LookIn:=xlValues, LookAt:=xlPart)

If Not foundCell Is Nothing Then
firstAddress = foundCell.Address
Do
MsgBox "見つかった行番号: " & foundCell.Row
Set foundCell = rng.FindNext(foundCell)
Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress
Else
MsgBox "キーワード '" & keyword & "' は見つかりませんでした。"
End If
End Sub

この方法を使えば、リスト中のすべての一致セルの行番号を1つずつ取得できます。


実用的な応用例:該当行を強調表示する

見つけた行を強調表示したい場合には、以下のように色を付けることも可能です。

foundCell.EntireRow.Interior.Color = RGB(255, 255, 0) ' 黄色に塗りつぶし

ループ処理と組み合わせて、複数行を一気にハイライトするのも簡単です。


まとめ

VBAのFindメソッドは、キーワードを検索して行番号を取得するのに非常に便利な機能です。基本的な使い方に加え、完全一致・部分一致の使い分け、検索方向や大文字・小文字の区別、複数ヒットへの対応など、実用性の高いポイントが多数あります。

本記事で紹介したコードをベースに、ぜひご自身の業務に合わせて応用してみてください。VBAのスキルが上達すると、Excel業務の効率が格段にアップしますよ。

タイトルとURLをコピーしました