Excel VBAで文字列を検索する:InStr, Find

VBAで文字列を検索するには、InStr関数またはFindメソッドを使用します。

InStr関数

InStr関数は、文字列内の指定文字列を検索し、最初に見つかった文字位置を返します。

構文は下記です。

Debug.Print InStr("兵庫県神戸市", "神")  '4が得られます
Debug.Print InStr(3, "徳島県徳島市", "徳") '4が得られます
Debug.Print InStr("大阪府大阪市", "県") '0が得られます

検索値が見つからない場合は0を返す性質を利用し、指定した文字列の有無を調べるのによく使われます。

Findメソッド

Findメソッドは、指定した文字列が含まれるセル(該当が複数の場合はそれらの先頭セル)を検索します。構文は下記です。

Dim myRng As Range

'A列には各都道府県が入力されており、セルA14に"神奈川県"と入力されているものとします。

    Set myRng = Columns(1).Find("神奈川県")
    Debug.Print myRng.Address & "には" & myRng.Value & "と入力されています。"

イミディエイトウインドウに「$A$14には神奈川県と入力されています。」と出力されます。

FindメソッドはRangeオブジェクトを返しますので、左辺のSetを忘れないようご注意ください。

Findメソッドの注意点

Findメソッドでは、VBA上のFindメソッド、またはExcelの「検索」での前回実行時の設定値が保存され、引数を省略するとこの設定が流用されます。そのため、前回は検索できたのに今回はできなかった…ということが起こり得ます。文字列を検索する場合は検索値に加え最低限、[検索対象種類]、 [完全一致or部分一致]の二値は指定しておいた方が無難です。 

Set myRng = Columns.Find("神奈川県", , xlValues, xlWhole)

また、ネット上でのサンプルコードや書籍等では、名前付き引数を明示して

Set myRng = Columns(1).Find(What:="神奈川県", LookIn:=xlValues, Lookat:=xlWhole)

と記述されることも多いので覚えておきましょう。



イベント

2017/12/05(火)
Design Thinking Square