• ベストアンサー

VBA instr関数で文字列を途中からカウント

ABCDEFGの文字列を最初から検索すると、以下の記述ではDなので4が帰ってきます。 InStr(1, "ABCDEFG", "D") 次に上記文字列を途中からカウントしたいのですが、 InStr(2, "ABCDEFG", "D") と記載しても、4しか帰ってきません。本来3になると思うのですが、なぜでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

いいえ,そうではありません。 VBAのヘルプより抜粋---------- ある文字列 (string1) の中から指定した文字列 (string2) を検索し、最初に見つかった文字位置 (先頭からその位置までの文字数) を返す文字列処理関数です。 ------------------- sub sample1() debug.print instr(5, "ABCDABCDABCD","D") end sub 5文字目から探し始めて最初に見つけたDの文字は文字列の先頭から数えて8文字目にあります,という結果を得ます。 >本来3になると思うのですが 3の結果が欲しければ debug.print instr(mid("ABCDEFG",2,99),"D") とでもして,2文字目からの文字列からDの字を探してみます。

Jack_mr
質問者

お礼

大変ありがとうございました。非常に助かりました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

もう詳しい回等が出ていますが、こういう疑問はInstr関数の解説を読むべきだ。 探すのはスタート(第1引数から探すが、返すのは、当初の先頭からの位置と覚えれば仕舞い。 だから探す位置からの位置は (1)文字列を切り出して、その文字列でINSTR (2)前回の結果を覚えておいて(sで使った数でも良い)計算する ーーー 私は下記のようなのを時々使うが Sub test01() s = 1 For i = 1 To 10 p = InStr(s, "ABCDEFDGFGDE", "D") If p = 0 Then Exit For MsgBox p s = p + 1 Next i End Sub 4、7、11と返る。 4、3、4などではない。

Jack_mr
質問者

お礼

大変ありがとうございました。非常に助かりました。今後はしっかり解説を読むようにします。