• ベストアンサー

検索文字が右から何文字目にあるか文字位置を取得

検索文字が右から何文字目にあるか文字位置を取得したいのですが 2文字指定できないのでしょうか? Sub test01() Debug.Print InStr(1, StrReverse("abcde"), "cd") End Sub だと、0が返りますが、 Sub test02() Debug.Print InStr(1, StrReverse("abcde"), "c") End Sub だと3が返ります。 複数の文字の検索文字が右から何文字目にあるか文字位置をする方法を ご教授ください。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

そりゃぁ・・・ > Debug.Print InStr(1, StrReverse("abcde"), "cd") 「StrReverse("abcde") → "edcba"」でしょうから、"cd"は見つからないでしょう・・ 検索する文字列も左右を入れ替えて   Debug.Print InStr(1, StrReverse("abcde"), StrReverse("cd")) でしょうねぇ。 でもこれだと返り値は「2」でしょうから、もう一工夫でしょうか。   Debug.Print InStr(1, StrReverse("abcde"), StrReverse("cd")) + Len("cd") - 1 こんな感じで。 もう少しわかりやすく   Debug.Print Len("abcde") - InStr(1, "abcde", "cd") + 1 でも良いでしょうけどね。 追記) 多分、ですが、「例」がよろしくないです。 "abcde"の中の"c"ですから、左からでも右からでも「3文字目」ですよね。 「例」として選ぶなら、もう少し工夫した方が良いかもしれませんね。 ※ Debug.Print Len("abcdefg") - InStr(1, "abcdefg", "e") + 1   左から5文字目、右からは3文字目ですね。

fjrbsmpqkkxux
質問者

お礼

回答ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

補足:-(M - 1) を書くのか否かは質問者の考え次第!

fjrbsmpqkkxux
質問者

お礼

回答ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

Public Function InstrRight(ByVal Text1 As String,               ByVal Text2 As String) As String   Dim L As Integer   Dim M As Integer   Dim N As Integer   L = Len(Text1)   M = Len(Text2)   N = InStr(1, Text1, Text2)   InstrRight = IIf(N = 0, 0, L - N + 1 - (M - 1)) End Function 既存の関数で無理な場合は自作するしか・・・。 実行結果は添付図を。

fjrbsmpqkkxux
質問者

お礼

回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ふつーに sub macro1() debug.print instr(1, strreverse("abcde"), strreverse("cd")) end sub とかで。

fjrbsmpqkkxux
質問者

お礼

回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう