和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列の位置を検索する - Instr関数

文字列の中から指定した文字列を検索し、
何文字目にあるかを取得する方法を解説します。

InStr関数を使用します。

基本構文

' 基本形
文字列位置 = InStr(検索元文字列, 検索文字列)

' 何文字目から検索を始めるかを指定
文字列位置 = InStr(検索開始位置, 検索元文字列, 検索文字列)

' 大文字・小文字を区別せずに比較
文字列位置 = InStr(検索開始位置, 検索元文字列, 検索文字列, vbTextCompare)

サンプルコード

実行結果サンプル

Instr("あいうえおABCあいう", "ABC") ' ← 6
Instr("あいうえおABCあいう", "あいう") ' ← 1
Instr(2, "あいうえおABCあいう", "あいう") ' ← 9 (2文字目から探しているため)

Instr(1, "あいうえおABCあいう", "abc") ' ← 0
Instr(1, "あいうえおABCあいう", "abc", vbTextCompare) ' ← 6

使用例:文字列を含むか判定

' セルが特定の文字列を含んでいるか判定
If Instr(Cells(R, 1), 検索文字列) > 0 Then

    ' セルが文字列を含んでいる場合の処理

End If

使用例:文字列より前/後を切り出し

' 文字列が登場するまでの左側を取得
ある文字列より左側の部分 = Left(元の文字列, InStr(元の文字列, 検索文字列) - 1)

' 文字列が登場するまでの右側を取得
' 1文字を探す場合
ある文字より右側の部分 = Right(元の文字列, Len(元の文字列) - InStr(元の文字列, 検索文字))
' 2文字以上の文字列を探す場合
ある文字列より右側の部分 = Mid(元の文字列, InStr(元の文字列, 検索文字列) + Len(検索文字列))

' ある「文字」からある「文字」までを取得
開始位置 =  InStr(元の文字列, 文字A) + 1
終了位置 =  InStr(元の文字列, 文字B) - 1

文字Aから文字Bまで = Mid(元の文字列, 開始位置, 終了位置 - 開始位置 + 1)

解説

InStr関数は、検索文字列が最初に現れる位置を返します。

検索文字列が見つからなかった場合は0を返してくれるため、
使用例の通り文字列が含まれているかの判定を簡単に行えます。


Instr関数は文字列操作の基本となる関数で、
Left/Right/Mid関数と組み合わせることで、
文字列の一部分を取り出したり除去する処理を実装できます。


様々な場面で活躍してくれる関数ですので、
用途に合わせて以下の記事をご参考ください。

引数についての細かい仕様

Instr関数は第1引数が省略可能という珍しい仕様の関数です。

' 基本形
文字列位置 = InStr(検索元文字列, 検索文字列)  ' ← 第1引数が省略扱い

' 何文字目から検索を始めるかを指定
文字列位置 = InStr(検索開始位置, 検索元文字列, 検索文字列)
Instr("あいうえおABCあいう", "あいう") ' ← 1
Instr(2, "あいうえおABCあいう", "あいう") ' ← 9

 
引数を3つ渡すと第1引数が「検索開始位置」として扱われる仕様ですので、
引数の順番にご注意ください。


続いて第4引数「比較方法」には、以下の値を指定できます。

定数 内容
vbUseCompareOption -1 Option Compareの設定に従います。
vbBinaryCompare 0 [規定] 大文字・小文字を区別します。
vbTextCompare 1 大文字・小文字を区別しません。
vbDatabaseCompare 2 データベースの設定に従います。Microsoft Access専用です。


といいつつ、Option Compareを設定することは稀であり、
さらに「それに合わせる」と指示する状況はさらに稀と思います。

「vbTextCompare」を指定すると大文字小文字を区別しなくなる
だけ知っておけばよいと思いますので、このコードだけ覚えておきましょう。


Option Compareについてはこちらをご覧ください。