VBA

最終更新日: 2024.02.09 (公開: 2024.01.30)

ExcelのVBAのFindメソッドとは?意味や具体的な使い方を解説

ExcelのVBAのFindメソッドとは?意味や具体的な使い方を解説

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の検索機能を使いこなしましょう。

アクセスランキング 人気のある記事をピックアップ!

    コードカキタイがオススメする記事!

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

      2024.01.26

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

      #プログラミングスクール

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

      2022.01.06

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

      #プログラミングスクール

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

      2024.01.26

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

      #プログラミングスクール

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

      2024.01.26

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

      #JAVA

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

      2024.01.26

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

      #プログラミングスクール

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

      2022.01.06

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

      #プログラミングスクール

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

      2024.01.26

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

      #プログラミングスクール

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

      2024.01.26

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

      #プログラミングスクール

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

      2024.01.26

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

      #プログラミングスクール

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

      2024.01.26

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

      #プログラミングスクール