文字列の中から指定した文字列を検索し、
何文字目にあるかを取得する方法を解説します。
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についてはこちらをご覧ください。