InStr関数:文字列の先頭から指定の文字列を検索し文字位置を返す

InStr 関数は Excel VBA で用意されている関数の一つで、対象の文字列の中に指定した文字列が現れる最初の位置を検索し、見つかった位置を文字位置で返します。 InStr 関数では文字列の先頭から末尾に向かって検索していきます。ここでは Excel VBA における InStr 関数の使い方について解説します。

※ 文字位置ではなくバイト位置で位置を取得する場合は InStrB 関数を使用します。 InStrB 関数については「InStrB関数:文字列の先頭から指定の文字列を検索しバイト位置を返す」を参照されてください。

(Last modified: )

InStr関数の定義と使い方

InStr 関数は対象の文字列の中に指定の文字列が最初に現れる位置を文字位置で返します。

InStr(string1,string2)

2 番目の引数に対象となる文字列を指定します。 3 番目の引数に検索する文字列を指定します。 InStr 関数の場合は文字列の先頭から末尾に向かって検索を行い、見つかった位置を文字位置で返します。見つからなかった場合は 0 が返されます。

次の例を見てください。

Debug.Print InStr("FLOWER","OW")       '3
Debug.Print InStr("京都府京都市","都")  '2

1 番目に指定した文字列の先頭から 2 番目に指定した文字列から最初に現れる位置を検索し、位置をイミディエイトウィンドウに表示します。半角文字か全角文字かに関係なく結果は文字位置で返される点に注意してください。

検索開始位置を指定する

検索する開始位置を指定する場合は、省略可能な 1 番目の引数に開始位置を文字数で指定してください。

次の例を見てください。

Debug.Print InStr(3,"京都府京都市","都")  '5

対象の文字列の 3 文字目以降から検索を行うので、 2 番目の位置にある "都" ではなく 5 番目の一にある "都" が一致するため 5 を返します。

文字列を比較するときの種類を指定する

文字列が一致しているかどうか比較するときの比較方法の種類を指定する場合は、省略可能な 4 番目の引数に値を指定します。指定可能な値は次の通りです。

定数説明
vbUseCompareOption-1Option Compareステートメントの設定を使用して比較を実行します
vbBinaryCompare0バイナリ比較を実行します
vbTextCompare1テキスト比較を実行します
vbDatabaseCompare2Microsoft Access のみ。 データベース内の情報に基づいて比較を実行します

デフォルトの値は vbBinaryCompare です。なお vbUseCompareOption を指定するとエラーが表示されました。

なお 4 番目の引数を指定する場合は、省略可能な 1 番目の引数も併せて指定する必要があります。

サンプルコード

それでは簡単なサンプルを作成して試してみます。

Option Explicit

Sub InStr関数()
    Range("D3").Value = InStr(Range("B3").Value, Range("C3").Value)
    Range("D4").Value = InStr(Range("B4").Value, Range("C4").Value)
End Sub

InStr関数の定義と使い方(1)

このプログラムを実行すると InStr 関数を使って B3 セルから B4 セルに入力されている文字列の先頭から末尾に向かって C3 セルから C4 セルに入力されている文字列を検索し、見つかった文字位置を取得します。取得した位置を D3 セルから D6 セルにそれぞれ代入します。

InStr関数の定義と使い方(2)

文字列の中で見つかる位置をすべて取得する

InStr 関数を使うと先頭または指定した位置から末尾に向かって指定の文字列が見つかった最初の位置を取得することができますが、最初の位置以外にも一致する部分がある場合に、すべての一致する位置を取得する方法です。

例えば下記のサンプルを実行すると、最初に見つかる 1 が表示されます。

Option Explicit

Sub InStr関数()
    Debug.Print InStr("京都府京都市下京区", "京")
End Sub

ただこの文字列の中には他にも "京" があります。これらの位置をすべて取得するには例えば次のようにプログラムを変更します。

Option Explicit

Sub InStr関数()
    Dim position As Integer
    position = 0

    Do
        position = InStr(position + 1, "京都府京都市下京区", "京")
        If position <> 0 Then
            Debug.Print position
        End If
    Loop Until position = 0
End Sub

文字列の中で見つかる位置をすべて取得する(1)

InStr 関数を使って指定の文字列が見つかったら、今度は前回見つかった位置に 1 を加えた位置から検索をもう一度行います。これを見つからなくなるまで繰り返します。プログラムを実行するとイミディエイトウィンドウには 1, 4, 8 と順番に指定の文字列が見つかった文字位置を表示します。

文字列の中で見つかる位置をすべて取得する(1)

-- --

Excel VBA における InStr 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。