検索

キーワード


【Excel VBA】検索して指定した文字が入力されているか確認する方法

  • 公開日:2020-12-01 09:59:17
  • 最終更新日:2021-03-03 23:19:34

はじめに

みなさんこんにちは、IMMRです。


以下のようなブック内のセルに入力された文字の検索をする時は、どうしていますか。

文字を検索する方法の一つが下記になります。


図1 ブック(参加者リストが記載されている)

参加者リスト


ブック内で行うときは、普通に検索をすると思います。(ここでは、石塚さんを検索しております)


図2 ブック(参加者リストの中で石塚さんを検索)

検索操作


では、VBAではどのように検索を行いますか。

For Nextステートメント等の繰り返し処理を使用して、1つ1つのセルに対して、 "=" を使っていく方法でも出来ますが

データ数多い場合は処理時間がかかってしまう時があります。

ここでは、セルを検索する方法を説明します。


1.検索して指定した文字が入力されているか確認する方法

検索して指定した文字が入力されているか確認するために使われるのがFindメソッドです。


Dim 検索結果を取得する変数 As Range

Set 検索結果を取得する変数 = Range(検索場所).Find(What:=検索Key)

If 検索結果を取得する変数 Is Nothing Then
 検索して、見つからなかった時の処理
Else
 検索して、見つかった時の処理
End If


・まずは検索して見つかったのか、見つからないのか、の結果を取得するための変数を宣言します。

 結果は、Rangeオブジェクトで返されるので、型はRangeオブジェクトになります。


検索Key検索場所を検索して、その結果を先ほど指定した変数に格納されます。

 

・Ifステートメントで結果が格納された変数を確認するのですが、

 Is Nothingは見つからなかった時です。 そのため、見つからなかった時の処理になります。

   逆にElseは見つかった時です。そのため、見つかったときの処理になります。



2.検索して指定した文字が入力されているか確認する方法のサンプルコード

検索して指定した文字が入力されているか確認する方法のサンプルコードは以下になります。


サンプルコード

Sub test16()

    Dim Find_Data As Range
    Dim Find_Name As String

    Find_Name = InputBox("ここに名前を記入してください")


    Set Find_Data = Range("B:B").Find(What:=Find_Name)

    If Find_Data Is Nothing Then
        MsgBox "見つかりません"
    Else
        MsgBox "見つかりました"
    End If

End Sub


・見つかった、見つからなかった時の結果を取得する変数は、Find_Dataで宣言しています。

・検索する文字を取得する変数をFind_Nameで宣言しています。

・InputBoxを使用して、入力された文字がFind_Nameに格納されます。

Find_Nameに格納された文字で指定したB列を検索し、結果をFind_Dataに格納されます。

Find_Dataに格納された検索結果より、見つからない場合は"見つかりません"

                   見つかった場合は"みつかりました。"とメッセージボックスで表示されます。



3.検索して指定した文字が入力されているか確認する方法実行

では実際に上記、コードを使用して、検索して指定した文字が入力されているか確認します


まず、インプットボックスが表示されました。


図3 ブック(インプットボックス表示)

インプットボックス



ここで"石塚"と入力して、OKを押します。


図4 ブック(インプットボックス入力)

インプットボックス入力



見つかったので"見つかりました"とメッセージボックスで表示されました。


図5 ブック(Find検索結果[見つかった])

検索結果


確認をすると確かにあります。


図6 ブック(Findで見つかった場合)

検索結果


検索が出来ています。


ちなみに記載されていない名前を入力します。


図7 ブック(インプットボックス入力)

インプットボックス入力


記載されてないので"見つかりません"と表示されます。


図8 ブック(Findで見つからなかった場合)

検索結果



【著者】

Imamura

今まではExcel VBAの開発をしてきました。
開発を主にしたものや他の業務の効率化を目指して行ったものさまざまです。
現在は、他のプログラミング言語に挑戦して、スキルアップを目指しています。

よく読まれている記事