こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

InStrRev関数の使い方について

後方から検索にならず、簡易な物で試して居ります。
Dim myStr As String
myStr = "54321"
MsgBox InStrRev(myStr, "5")
5が出て欲しいが、1と出ます。
間違いは何処でしょうか。

InStrRevを間違って覚えているのか。。。

宜しくお願い致します。

投稿日時 - 2018-06-07 17:35:36

QNo.9506036

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

「54321」を後ろから探して最初に見付かる「5」は「1文字目」にある「5」なので、InStrRevは「1」を返します。

「54321543」の場合を試してみて下さい。後ろから探して最初に見付かる「5」は「6文字目の5」なので6が返ってきます。

「後ろから何文字目にあるか?」が知りたいなら「Len(myStr)+1-InStrRev(myStr,"5")」のように計算します。

投稿日時 - 2018-06-07 23:21:44

お礼

有難う御座います。
他の関数と混同していた様です。
納得しました。

投稿日時 - 2018-06-14 18:12:33

ANo.2

InStrRev 関数は InStr 関数の変形ですね
どちらの関数も、指定された文字列の中から最初に見つかった検索文字の位置を返します
InStr 関数は指定された文字列の頭から
InstrRev 関数の場合は指定された文字列の最後から検索します
戻り値はどちらの関数でも最初に見つかった検索文字の(文字列の中の頭から数えた)位置を返します。
従って、検索文字列が "54321" の場合は InStr 関数でも InStrRev 関数でも返す値は 検索文字列の中の頭から数えた "5" の位置 "1” を返します、決して InStrRev だからと言って、検索文字列の中の「後ろから数えた文字の位置」を返すことはありません。

投稿日時 - 2018-06-07 18:27:00

お礼

有難う御座います。
少し前なのでよくは覚えていませんが、まさに「後ろから数えた文字の位置」で誤解していた気がします。

投稿日時 - 2018-06-14 18:14:12

ANo.1

>間違いは何処でしょうか。

間違いではないです。
後方から検索して"5"は「文字列の最初から1番目」にあります。(検索方法が「後方から」なのであって、文字列の後方から何番目ということではありません)
確認のためには myStr = "543215" という文字列で試してみてください。

投稿日時 - 2018-06-07 18:19:27

お礼

有難う御座います。
後方からだと誤解していたようです。

投稿日時 - 2018-06-14 18:14:39

あなたにオススメの質問