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

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

InStr関数

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

構文は下記です。

[開始位置]:検索を開始する位置を指定します。省略可能です。省略した場合、先頭からになります。

[対象文字列]:検索の対象となる文字列を指定します。

[検索文字列]:[対象文字列]の中から検索する文字列を指定します。

[比較モード]:比較するモードを指定します。省略可能で、省略した場合、vbBinaryCompare(大文字/小文字を区別する)になります。

戻り値は数値で、見つからなかった場合は0を返します。以下に例を示します。

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

Findメソッド

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

[検索値]のみ必須で他は省略可です。省略されることが多いので、特に重要なもののみ説明します。

[検索対象種類]:xlFormulas(数式)、xlValues(値)、xlComents(セルのコメント)の3種類です。文字列検索の場合、xlValuesを用います。

[完全一致or部分一致]: xlPart(部分一致)、xlWhole(完全一致)の2種類です。

戻り値はRangeオブジェクト(セル)で、見つからなかった場合はNothingを返します。

また、FindメソッドはRangeオブジェクトのメソッドですので、式.Findの「式」の部分にはRangeオブジェクトを記述します。下記の例では、特定のセルに何が入力されているのかを表示するプログラムを示します。検索範囲をColumns(1)(=A列)に限定しています。(シート全体を検索するのであれば、「Cells.Find…」とします。)

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

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

Findメソッドの注意点

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

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

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



Welcome to UX MILK

UX MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。

このサイトについて

UX MILKのディレクター募集