アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のような記述だと1つめのsampleの位置(9文字目)は取得できても
2つめのsample(25文字目)の位置を取得することができません。
どうすれば2つめの文字列の位置を取得することができるのでしょうか?

moji = "This is sample text for sample."
n = InStr(moji, "sample")

使用OS:Windows XP
使用ソフト:Microsoft Excel 2003

ご存知の方がおられましたらご回答をよろしくお願いします。

A 回答 (5件)

InStrは、開始位置の指定ができます。

省略でき、初期値は1なので気が付きにくい。
moji = "This is sample text for sample."
n = InStr(moji, "sample")

n2 = InStr(n, moji, "sample")



でも、Splitで分割件数を数える方が楽ですよ。

dim strArrey() as string
dim nArrey as long

moji = "This is sample text for sample."
strArrey() = split(moji, "sample")

'ここでは以下のとおりに分割されている
'strArrey(0)="This is "
'strArrey(1)=" text for "
'strArrey(2)="."

nArrey=UBound(strArrey())
'nArreyは分割されている件数を拾えるので2となる(ZeroOriginです)
    • good
    • 0
この回答へのお礼

InStrに開始位置があるとは知りませんでした。
ご回答いただきどうもありがとうございました。

お礼日時:2008/07/18 18:51

#1です。

失礼しました。以下のとおり訂正。

誤)n2 = InStr(n , moji, "sample")

正)n2 = InStr(n + Len("sample"), moji, "sample")
    • good
    • 0

#1、#2です。

たびたびすみません。
#2は無かったことにしてください。

#1の誤)n2 = InStr(n , moji, "sample")

#2の誤)n2 = InStr(n + Len("sample"), moji, "sample")


正)n2 = InStr(n + 1, moji, "sample")
    • good
    • 1

こんにちは


3つ目以上の場合はわかりませんが、2つ目なら後ろから数える
方法があるようです。

moji = "This is sample text for sample."
m = InStrRev(moji, "sample") '←こいつです。後ろから検索
n = InStr(moji, "sample")

MsgBox (Str(m))
MsgBox (Str(n))

とりあえず、ご参考まで^^;
    • good
    • 1
この回答へのお礼

なるほど、2つ限定であればこういう書き方もあるのですね。
ご回答いただきどうもありがとうございました。

お礼日時:2008/07/18 18:53

下記のどちらとも取れる表現だ。


質問例からは(2)かな。
(1)セルの探索
マクロの記録状態にして、操作で、編集ー検索をやってみて、記録されたコードをみて、自分の場合はどこを、どう修正したらよいか考え、疑問が多分残るだろうから、それに絞って質問する。
普通の質問はこっちの方だが。
ーー
(2)1セル内
>文章にある複数の同じ文字列の位置をそれぞれ
1セル内の文字列内の2度目以降の出現を聞いているのか
その場合は繰り返しを行い、nが0になった場合でInstr実行を終了する。下記のInstrの探索のスタートポイント(下記でs)を活用するのがミソだ。
Sub test01()
a = Cells(1, 1)
s = 1
Do
n = InStr(s, a, "dr")
If n = 0 Then Exit Sub
MsgBox Mid(a, n, 2)
s = n + 1
Loop
End Sub
探索しているのが、語句なら上例で「dr+スペース」などを考えれば
よいかもしれない。
    • good
    • 0
この回答へのお礼

ご回答を参考にして、下記のように作ってみました。

Sub test01()
s = "This is sample text for sample."
i = 1
Do
n = InStr(i, s, "sample")
If n = 0 Then Exit Sub
MsgBox n & "文字目にsampleがあります"
i = n + 1
Loop
End Sub

ご回答いただきどうもありがとうございました。

お礼日時:2008/07/18 19:05

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