dポイントプレゼントキャンペーン実施中!

ABCDEFGの文字列を最初から検索すると、以下の記述ではDなので4が帰ってきます。

InStr(1, "ABCDEFG", "D")

次に上記文字列を途中からカウントしたいのですが、

InStr(2, "ABCDEFG", "D")

と記載しても、4しか帰ってきません。本来3になると思うのですが、なぜでしょうか?

A 回答 (2件)

いいえ,そうではありません。



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の字を探してみます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/12 23:15

もう詳しい回等が出ていますが、こういう疑問は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などではない。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/12 23:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!