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

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

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

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

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

2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール

2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール

2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール

2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA

2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール

2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール

2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール

2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール

2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール

2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール