VBAを勉強することで、さまざまなマクロを組むことができるため、Excelを活用する方にとっては非常に役立つスキルです。今回の記事では、VBAの中でも重要なFindメソッドの基本的な意味から実際の使い方までを詳しく解説します。
目次
ExcelVBAのFindメソッドとは?

ExcelのVBAにおけるFindメソッドは、ワークシート内の特定の値や文字列を検索するためのメソッドです。Findメソッドを利用することで、大量のデータの中から目的の情報を迅速に見つけ出すことができます。
たとえば、何千行にも及ぶデータの中から特定のキーワードや数値を検索したいとします。このような場合、手動での検索は時間がかかりますが、Findメソッドを使用することで、素早く位置を特定できます。
ExcelVBAのFindメソッドの引数と戻り値

Findメソッドにはいくつかの主要な引数があり、それぞれに特定の役割があります。
After | 検索を開始するセルを指定します |
LookIn | 検索する値の種類(値、書式など)を指定します。 |
LookAt | 部分一致か完全一致かを選択します。 |
SearchOrder | 行または列の順番で検索するかを指定します。 |
上記の引数を適切に設定することで、条件を指定した検索が可能になります。検索結果として、該当するセルをRangeオブジェクトとして受け取ります。一致するものがない場合は、Nothingという特殊な値が戻り値として返されます。
ExcelVBAのFindメソッドで文字列を検索する方法

VBAでEcxel上の文字列を検索する場合、Findメソッドと引数を設定することでさまざまな条件の検索が可能となります。ここでは、それぞれの条件ごとの記載方法について紹介します。
全文一致で検索してみよう
Excel VBAで文字列の完全な一致を検索する際、LookAt:引数で=xlWholeを定数に指定して使用します。
Dim rng As Range Set rng = Sheets("Sheet1").Range("A1:A100").Find(What:="キーワード", LookAt:=xlWhole) If Not rng Is Nothing Then MsgBox "見つかったセルのアドレスは" & rng.Address & "です。" Else MsgBox "キーワードを含むセルは見つかりませんでした。" End If
このコードでは、A1からA100までの範囲で”キーワード”という文字列が完全に一致するセルを検索しています。If Not rng Is Nothingで該当するセルが見つかったかどうかを判断しています。
部分一致で検索してみよう
部分一致の検索は、特定のキーワードが含まれるセルを探す際に使用されます。LookAtの引数で定数にxlPartを指定することで、部分一致の検索が可能です。
Dim rng As Range Set rng = Sheets("Sheet1").Range("A1:A100").Find(What:="部", LookAt:=xlPart) If Not rng Is Nothing Then MsgBox "部分一致するセルのアドレスは" & rng.Address & "です。" Else MsgBox "部分一致するセルはありませんでした。" End If
このコードは、セルの内容に”部”という文字列が部分一致する場所を検索します。
複数セルを検索してみよう
Findメソッドは最初に該当するセルのみを返します。複数の該当セルを見つけるためには、FindNextメソッドと組み合わせる必要があります。
Dim rng As Range, firstAddress As String Set rng = Sheets("Sheet1").Range("A1:A100").Find(What:="キーワード") If Not rng Is Nothing Then firstAddress = rng.Address Do MsgBox "キーワードを含むセルのアドレス: " & rng.Address Set rng = Sheets("Sheet1").Range("A1:A100").FindNext(rng) Loop While Not rng Is Nothing And rng.Address <> firstAddress End If
上記のようにFindメソッドの後に、FndNextメソッドを加えることで、条件に合致したセルが見つかっても、続けて検索し続けます。このとき、FindNextには引数を設定しなくても大丈夫です。
ただし、FindNextメソッドは最後まで検索を行うと、指定した範囲の最初にループするようにできています。このため、ループを抜ける指示をださないと永久に検索し続けるため気をつけましょう。
値が見つからないときは?
該当する値や文字列が見つからない場合、FindメソッドはNothingを返します。
Dim rng As Range Set rng = Sheets("Sheet1").Range("A1:A100").Find(What:="キーワード") If rng Is Nothing Then MsgBox "指定したキーワードを含むセルが見つかりませんでした。" Else MsgBox "キーワードを含むセルのアドレスは" & rng.Address & "です。" End If
このコードでは、検索結果がNothing(つまり、該当するセルがない)の場合に、エラーメッセージを表示しています。
ExcelVBAのFindメソッドで複数の条件を指定して検索する方法

ExcelVBAのFindメソッドは柔軟に、複数の条件を指定してセル内のデータを検索することが可能です。ここでは、複数の条件を用いたOr検索とAnd検索の方法を詳しく解説します。
Or検索
Or検索は、いずれかの条件に一致するセルを検索します。VBAでは、Findメソッドを複数回実行し、それぞれの条件を判定することでOr検索を実現します。
Dim rng As Range Set rng = Range("A1:A100") Set myObj = myRange.Find(keyWord1, LookAt:=xlPart) If myObj Is Nothing Then MsgBox "'" & keyWord1 & "'と'" & keyWord2 & "'のどちらも含みませんでした" Exit Sub End If Dim msg As String Dim myCell As Range Set myCell = myObj Do If InStr(myCell.Value, keyWord2) <> 0 Then msg = msg & "'" & keyWord1 & "'と'" & keyWord2 & "'は" & myCell.Row & "行目にあります" & vbCrLf End If Set myCell = myRange.FindNext(myCell) Loop While myCell.Row <> myObj.Row If msg = "" Then MsgBox "'" & keyWord1 & "'と'" & keyWord2 & "'のどちらも含みませんでした" Else MsgBox msg End If End Sub
And検索
And検索は、全ての条件に一致するセルを検索します。これを実現するためには、FindメソッドとVBAの条件文を組み合わせる必要があります。
Dim rng As Range Set rng = Sheets("Sheet1").Range("A1:A100").Find(What:="条件1") If Not rng Is Nothing Then Set rng = rng.Find(What:="条件2") End If If Not rng Is Nothing Then MsgBox "両条件に一致するセルのアドレスは" & rng.Address & "です。" Else MsgBox "両条件に一致するセルはありませんでした。" End If
上記のコードでは、まず”条件1″に一致するセルを検索し、その後その範囲内で”条件2″に一致するセルを再検索しています。
ExcelVBAのFindメソッドを使う際の注意点

ExcelVBAのFindメソッドは非常に強力で便利な機能ですが、適切に利用するために知っておくべき注意点がいくつか存在します。ここでは、主な注意点を3つ紹介します。
引数を省略・設定して実行する際に注意が必要
Findメソッドを使用する際、引数を省略すると前回の検索条件が継続して使用される特性があります。このため、続けて異なる条件でFindメソッドを利用する場合、期待した動作と異なる結果を引き起こす可能性があるのです。
たとえば、特定の文字列を検索した後、次のFindメソッドで引数を省略すると、前回の検索条件が再適用されます。この特性を理解し、意図しない動作を避けるために、毎回必要な引数を指定しましょう。
指定オプションがシート操作とリンクしていることに注意
ExcelのGUI上で「検索」や「置換」の操作を行った際の設定は、VBAのFindメソッドにも影響を与えることがあります。とくに、大文字小文字の区別やセル全体との一致といったオプションが、Findメソッドの結果にも反映される場合があるため、注意が必要です。
VBAのコード実行前に、GUI上で検索や置換の設定を変更した場合は、その設定がFindメソッドにも適用される可能性があるのを覚えておきましょう。
「値」で検索した場合は、表示形式に依拠した検索になる
Findメソッドでセルの「値」を基に検索を行う場合、セルの表示形式がその検索結果に影響します。
セルの実際の値と、表示形式によって表示される値とは異なる場合があり、Findメソッドで意図した値を検索しても、結果として見つからないことがあります。このような場合は、セルの表示形式を考慮しつつ、検索条件や方法の調整が必要です。
ExcelVBAのFindメソッドを使って検索結果を複数取得しよう

ExcelVBAのFindメソッドは、シート内で特定の値や文字列を検索する際に非常に有用です。しかし、一度の検索で1つの結果しか返されないため、複数の該当データを取得するには工夫が必要です。
今回は、Findメソッドを利用して、一度に複数の検索結果を取得する方法を詳しく解説しました。Findメソッドを上手に活用し、VBAの検索機能を使いこなしましょう。