Excel VBA Instr関数の使い方

Instrは、頻繁に使用される文字列処理関数です。この記事では、この関数の使い方を説明します。

この関数の構造をご覧ください。 InStr([検索を始める位置,] 検索の対象となる文字列,検索する文字列[,文字列を比較する])、その関数は、開始位置から検索された文字列が初めて見つけます。 見つかった場合はその位置を返し、見つけない場合は0を返します。

構文

InStr([start,]string1,string2[,compare])
引数説明
startオプショナル。検索の開始位置を表す数式を指定します。省略すると、先頭の文字から検索されます。引数 start に Null 値が含まれている場合、エラーが発生します。引数 compare を指定した場合は、start も指定する必要があります。
string1必須。検索対象となる文字列を指定します。
string2必須。引数 string1 内で検索する文字列を指定します。
compare必須。文字列比較の比較モードを指定する番号を設定します。デフォルト値は0です。次の値を使用できます。
• 0 = vbBinaryCompare – バイナリ モードで比較します。
• 1 = vbTextCompare – テキスト モードで比較します。

引数のCompareは定数値に設定します説明
vbUseCompareOption -1Option Compareステートメントの設定で、比較を実行します。
vbBinaryCompare 0バイナリ比較を実行します。(英文字は大文字と小文字が区別されます)
vbTextCompare 1元のテキストに基づいて比較を実行します。(英文字は大文字と小文字を区別しません)
vbDatabaseCompare -2Microsoft Accessのみ対応でき、データベース情報に基づいて比較を実行します。

InStr関数は、次の値を返すことができます。

  • string1が “”(文字列の長さは0)の場合-InStrは0を返します
  • string1がNullの場合-InStrはNullを返します
  • string2が “”の場合-InStrはstartを返します
  • string2がNullの場合-InStrはNullを返します
  • string2が見つからない場合-InStrは0を返します
  • string2がstring1で見つかった場合、InStrは一致する文字列が見つかった位置を返します。
  • start > Len(string1)の場合-InStrは0を返します

以下の例をご覧ください

instr("ABCBD","B")

結果は2です。ここでは最初の引数が省略されています。つまり、最初から検索すると、最初のBが2番目の位置に表示されるため、結果は2になります。

instr(3,"ABCBD","B")

結果は4です。最初の引数3は、3番目の文字[C]から検索することを意味します。最初に見つかったBは4番目の位置にあるため、結果は4になります。

instr(3,"ABCBD","b",0)

結果は0です。4番目の引数0は大文字と小文字を区別することを意味します。元の文字列には小文字のbがないため、結果は0になります。

instr(3,"ABCBD","b",1)

結果は4で、4番目の引数1は大文字と小文字を区別しないことを意味するため、3文字の後に最初に見つかるのは大文字のBで、これは4番目の位置にあります。

instrのメリットを利用して、特定の文字が元の文字列に含まれているかどうかを判断することがよくあります。返す値が0の場合は含まれません。0以上の数値なら含まれます。この判断条件もよく使用されます。

instrと言えば、他の2つの関数を是非ご覧ください。application.findとapplication.search、findとsearchはワークシート関数です。VBAで使用するには、その前にapplicationを追加する必要があります。ワークシート内のセルを検索するために使用できます。この関数は、[Find関数の使い方]で説明しました。文字列内の文字を検索することもできます。使い方は大体instrと同じです。ワークシートでfindとsearchの違いは、findが大文字と小文字を区別し、searchが大文字と小文字を区別しません。次には例をご覧ください。

application.Find("M","AMAAM",3)

結果は5です。つまり、文字列「AMAAM」の3番目の文字から「M」を検索し、最初に見つかったMの位置を返します。

application.search("m","AMAAM",3)

結果も5です。findとの唯一の違いは、大文字と小文字が区別されないことです。

これらの2つの関数は、instrと同じように見えますが、ワークシート関数であるため、多くの制限があります。文字列の長さに制限があります。どのくらいの量かはわかりませんが、まだ試しています。1万文字の文字列は実行できます。9万文字以上の文字列を作成したのですが、実行できません。これら2つの機能を了解することだけでいいです。通常はinstrを使用してください。

簡単な例

dim proj,cont
proj = "日本製-東京"
cont = InStr(proj,"-")

cont は 4 です。文字(-)は文字列の5番目にあります

cont = InStr(“日本製-東京”,”-“)

cont も4です。文字(-)は文字列の5番目にあります

検索関数のように、文字の位置を検索し、位置を返します
他の例では、”佐藤”を検索します

cont = InStr(“私は佐藤です”,”佐藤”)

cont は3です。文字(佐藤)は文字列の3番目にあります

佐藤は2文字ですが、検索位置は佐から計算されます

実例

例1

dim txt,pos
txt="This is a beautiful day!"
pos=InStr(txt,"his")
msgbox(pos)

結果:2

例2

dim txt,pos
txt="This is a beautiful day!"
'A textual comparison starting at position 4
pos=InStr(4,txt,"is",1)
msgbox(pos)

結果:6

例3

dim txt,pos
txt="This is a beautiful day!"
'A binary comparison starting at position 1
pos=InStr(1,txt,"B",0)
msgbox(pos)

結果:0

Excel VBA Instr関数の説明と実例

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です