• 締切済み

InStrRev関数の使い方について

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

みんなの回答

回答No.3

「54321」を後ろから探して最初に見付かる「5」は「1文字目」にある「5」なので、InStrRevは「1」を返します。 「54321543」の場合を試してみて下さい。後ろから探して最初に見付かる「5」は「6文字目の5」なので6が返ってきます。 「後ろから何文字目にあるか?」が知りたいなら「Len(myStr)+1-InStrRev(myStr,"5")」のように計算します。

noname#233045
質問者

お礼

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

  • emsuja
  • ベストアンサー率50% (1065/2116)
回答No.2

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

noname#233045
質問者

お礼

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

  • kteds
  • ベストアンサー率42% (1882/4440)
回答No.1

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

noname#233045
質問者

お礼

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

関連するQ&A