VBAの全てがここにある!

InStrは「含む」「あいまい検索」「複数検索」3つの特徴を持つ関数

Shirota

開発エンジニア/AccessVBA/ExcelVBA/ボールド歴1年

InStr関数は文字列から検索文字列を探し出すときに使う関数です。

この関数は大きく3つの特徴があります。指定の文字列を「含む」・「あいまい検索する」・「複数検索する」の3つです。この3つの特徴をInStr関数は持っています。

3つの特徴をの基本的な使い方をサンプルプログラムを交えて説明します。実際にコードウィンドウに張り付けて、ぜひ実行してみてください。


1.InStr関数の3つの特徴とLike演算子を比較する

1-1.InStr関数、1つ目の特徴、「含む」

指定の文字列を「含む」かどうかを検索したい場合に使用します。

この「含む」の使い方はさらに3つの使い方ができます。「~を含む」・「~を含まない」・「~で始まる」です。この条件は戻り値を利用することで判断ができます。

InStr関数は戻り値の特長を利用した方法で「含む」を判断します。

1-2.InStr関数、2つ目の特徴、「あいまい検索する」

大文字と小文字、半角と全角、ひらがなとカタカナを区別しないで検索できます。

テキストモードを使います。InStr関数の引数、またはモジュール宣言セクションに設定します。

1-3.InStr関数、3つ目の特徴、「複数検索する」

検索文字列が何個存在しているかを確認できます。

繰り返し処理、Do Loopステートメントを使用します。

1-4.Like演算子でも「含む」と「あいまい検索」ができる

Like演算子とワイルドカードを使った条件でも「含む」という検索ができます。

テキストモードでは、大文字と小文字、半角と全角、ひらがなとカタカナを区別しないで検索します。

InStr関数は戻り値の値により「含む」などを判断します。Like演算子はIf文とワイルドカードを使って、複数の「含む」などの検索をします。Like演算子の使い方を知っておくことも有益です。そしてわかりやすいコード記述とすることが重要です。

1-5.※ 区切り文字が「スペース」や「ピリオド」の場合の取り出し処理は「Split関数」を活用する

名前を区切る、IPアドレスをオクテットに分割する場合は、InStr関数で調べた位置をLeft関数やMid関数の引数に指定し取り出すことが可能です。しかし、区切り文字が「スペース」や「ピリオド」などの場合は、「Split関数」を活用する方が解りやすく、処理もスムーズになります。「Split関数」の使い方を知っておくことも有益です。そしてわかりやすいコード記述とすることが重要です。


2.InStr関数の構文

2-1.InStr関数の構文について

【書式】

Instr ([開始位置 ,] 文字列 , 検索文字列 [, 比較方法])

 

戻り値はVariant型です

引数については次のとおりです。

引数 説明 省略値
開始位置(省略可能) 開始する位置(省略すると1となる) 1
文字列(必須) もととなる文字列を指定する
検索文字列(必須) 検索する文字列を指定する
比較方法(省略可能) 比較方法を示す数値。値については、「比較方法 定数」を参照してください。 0

比較方法については次のとおりです。

比較方法 定数 説明
vbUseCompareOption Option Compare ステートメントの設定を使用して比較する -1
vbBinaryCompare バイナリモードで比較する。
半角と全角、ひらがなとカタカナ、アルファベットの大文字と小文字を区別します
0
vbTextCompare テキストモードで比較する。
半角と全角、ひらがなとカタカナ、アルファベットの大文字と小文字を区別しない
1
vbDatabaseCompare
(Accessのみ)
DBに格納されている設定で比較する 2

vbUseCompareOption」は、モジュール宣言セクションに指定した値で比較します。

2-2.Option Compare ステートメントを設定する

モジュール宣言セクションにOption Compare ステートメントを使用して比較方法を設定することができます。比較方法はExcelは2つ。Accessは3つです。

Option Compare ステートメントの設定方法 説明
Option Compare Binary バイナリモードで比較する。
Option Compare Text テキストモードで比較する。
Option Compare Database
(Accessのみ)
DBに格納されている設定で比較する

3.動作確認はイミディエイトウィンドウを利用する

動作確認は、Debug.Printを使いイミディエイトウィンドウの利用が便利です。

イミディエイトウィンドウを開きます。([表示]メニュー → [イミディエイトウィンドウ]を選択します)

コードウィンドウにカーソルを当てて実行する(F5)と、イミディエイトウィンドウへ結果が出力されます。

■実行結果:

イミディエイトウインドウ


4.InStr関数の使い方

4-1.指定の文字列を「含む」かどうかを検索する

Instr関数は文字列の中から検索文字列を検索し、見つかった位置を数値で返す関数です。3つの使い方、「~を含む」・「~を含まない」・「~で始まる」という条件は、戻り値の特長を利用した方法です。

戻り値が、見つからないときは、0の「~を含まない」。見つかったときは、「~を含む」。戻り値が1の場合は「~で始まる」と判断できます。

■実行結果:

実行結果①

4-2.大文字と小文字、半角と全角、ひらがなとカタカナを区別しないで検索する

■テキストモード

InStr関数は引数を設定しなければ、大文字と小文字を区別します。大文字と小文字を区別しないにするには、第4引数に “vbTextCompare” を指定します。

その他の方法としては、モジュール宣言セクションに「Option Compare Text」を設定します。大文字と小文字、半角と全角、ひらがなとカタカナを区別しないで検索します。

■実行結果:

すべての検索文字列が見つかった。戻り値がゼロではない。

実行結果②

4-3.検索文字列が複数含まれる場合は Do Loopステートメント

文字列の中に検索文字列が何個存在しているかを確認できます。

複数含まれるかを調べる場合は Do LoopステートメントとInStr関数を使います。

■実行結果:

実行結果③

半角カタカナのシブシですが、全角カタカナの文字列の位置、1 , 5 , 11 , 15 , 23番目に存在しました。そして5つありました。カウント数により、例えば、検索文字を取り出すなどのパターン処理が考えられます。

4-4.特定の文字列を取り出す

InStr関数のサイトの検索でヒットする「文字列を抜き出す」、「指定し取り出す」、「特定の文字の後ろを全て削除する」などの「取り出す」処理は、Do LoopステートメントとInStr関数、そしてMid関数を組み合わせて動的配列に値を設定する方法で取り出します。

下記のサンプルは、検索文字列が、1つ含むでも、複数含むでも、含まないでも、各要素を取り出すことができます。

■実行結果:

実行結果④

“シブシですが、文字列の位置、1 , 5 , 11 , 15 , 23番目に存在しました。そして5つにすることができました。


5.さいごに

最後に、InStr関数は文字列から検索文字列を探し出すときに使う関数です。

とくに、指定の文字列を「含む」の使い方を理解しておくことは有益なことだと思います。この「含む」の使い方、「~を含む」・「~を含まない」という条件は、FBの照合で使用したことがあります。

振込人欄と顧客マスタの「振込人欄(n)」とで照合するのです。それでも無い場合は振込人欄と顧客マスタの「顧客名カナ」と照合するのです。この時、)” “(を削除しなくてもよい「InStr関数」はたいへん役に立ちました。また、テキストモードの比較を引数で指定すれば、全角の「顧客名カナ」でも照合することができるのです。その後は人が紐付けを行い、学習機能として情報を保存し、次回に特定できるようにします。

 InStr関数、たいへん役に立つ関数です。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。