InStrB関数:文字列の先頭から指定の文字列を検索しバイト位置を返す
InStrB 関数は Excel VBA で用意されている関数の一つで、対象の文字列の中に指定した文字列が現れる最初の位置を検索し、見つかった位置をバイト数で返します。 InStrB 関数では文字列の先頭から末尾に向かって検索していきます。ここでは Excel VBA における InStrB 関数の使い方について解説します。
※ バイト位置ではなく文字位置で位置を取得する場合は InStr 関数を使用します。 InStr 関数については「InStr関数:文字列の先頭から指定の文字列を検索し文字位置を返す」を参照されてください。
(Last modified: )
InStrB関数の定義と使い方
InStrB
関数は対象の文字列の中に指定の文字列が最初に現れる位置をバイト位置で返します。
2 番目の引数に対象となる文字列を指定します。 3 番目の引数に検索する文字列を指定します。 InStrB
関数の場合は文字列の先頭から末尾に向かって検索を行い、見つかった位置をバイト位置で返します。見つからなかった場合は 0 が返されます。
次の例を見てください。
Debug.Print InStrB("FLOWER","OW") '5 Debug.Print InStrB("京都府京都市","都") '3
1 番目に指定した文字列の先頭から 2 番目に指定した文字列から最初に現れる位置を検索し、位置をイミディエイトウィンドウに表示します。注意点として Shift_JIS ではないので全角文字が 2 バイトで半角文字が 1 バイトではなく、全角文字であっても半角文字であっても 1 文字は 2 バイトである点です。そのため全角文字か半角文字かに関係なく 2 文字目に見つかった場合は 3 、 3 文字目に見つかった場合は 5 が返ります。
検索開始位置を指定する
検索する開始位置を指定する場合は、省略可能な 1 番目の引数に開始位置をバイト数で指定してください。
次の例を見てください。
Debug.Print InStrB(7,"京都府京都市","都") '9
対象の文字列の 7 バイト目以降から検索を行うので、 2 番目の位置にある "都" ではなく 5 番目の一にある "都" が一致するため 9 を返します。位置を指定する場合も全角文字か半角文字かに関わらず 1 文字は 2 バイトになる点に注意してください。
文字列を比較するときの種類を指定する
文字列が一致しているかどうか比較するときの比較方法の種類を指定する場合は、省略可能な 4 番目の引数に値を指定します。指定可能な値は次の通りです。
定数 | 値 | 説明 |
---|---|---|
vbUseCompareOption | -1 | Option Compareステートメントの設定を使用して比較を実行します |
vbBinaryCompare | 0 | バイナリ比較を実行します |
vbTextCompare | 1 | テキスト比較を実行します |
vbDatabaseCompare | 2 | Microsoft Access のみ。 データベース内の情報に基づいて比較を実行します |
デフォルトの値は vbBinaryCompare
です。なお vbUseCompareOption
を指定するとエラーが表示されました。
なお 4 番目の引数を指定する場合は、省略可能な 1 番目の引数も併せて指定する必要があります。
半角文字を1バイト、全角文字を2バイトとして取得したい場合
全角文字なら 2 バイト、半角文字なら 1 バイトとして文字を取得したい場合は StrConv
関数を使って次のように記述します。(Windows 環境のみ)。
InStrB(StrConv("FLOWER",vbFromUnicode),StrConv("OW",vbFromUnicode)) InStrB(StrConv("東京都",vbFromUnicode),StrConv("都",vbFromUnicode))
StrConv
関数で対象の文字列および検索する文字列を Unicode から Shift_JIS へ変換したあとで検索を行い、見つかった位置をバイト位置として取得します。このようにすることで全角文字は 1 文字が 2 バイト、半角文字は 1 文字が 1 バイトになります。
"FLOWER" については "OW" が 3 バイト目に見つかり、 "東京都" については "都" が 5 バイト目に見つかります。
※ StrConv
関数の詳しい使い方については「StrConv関数:文字列で大文字小文字や全角半角の変換などを行う」を参照されてください。
それでは簡単なサンプルを作成して試してみます。
Option Explicit Sub InStrB関数() Range("D3").Value = InStrB(Range("B3").Value, Range("C3").Value) Range("D4").Value = InStrB(Range("B4").Value, Range("C4").Value) End Sub
このプログラムを実行すると InStrB
関数を使って B3 セルから B4 セルに入力されている文字列の先頭から末尾に向かって C3 セルから C4 セルに入力されている文字列を検索し、見つかったバイト位置を取得します。取得した位置を D3 セルから D6 セルにそれぞれ代入します。 InStrB
関数をそのまま使用した場合、全角文字であっても半角文字であっても 1 文字は 2 バイトとなります。
もう一つサンプルを作成して試してみます。今度は全角文字が 2 バイト、半角文字が 1 バイトとして計算されるように変更したものです。
Option Explicit Sub InStrB関数() Range("D3").Value = InStrB(StrConv(Range("B3").Value,vbFromUnicode), StrConv(Range("C3").Value,vbFromUnicode)) Range("D4").Value = InStrB(StrConv(Range("B4").Value,vbFromUnicode), StrConv(Range("C4").Value,vbFromUnicode)) End Sub
このプログラムを実行すると InStrB
関数を使って B3 セルから B6 セルに入力されている文字列の右端から 4 バイトだけ部分文字列を取得し、取得した文字列を C3 セルから C6 セルにそれぞれ代入します。このとき全角文字は 1 文字が 2 バイト、半角文字は 1 文字が 1 バイトとして計算されます。
-- --
Excel VBA における InStrB 関数の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。