- ベストアンサー
検索文字が右から何文字目にあるか文字位置を取得
検索文字が右から何文字目にあるか文字位置を取得したいのですが 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が返ります。 複数の文字の検索文字が右から何文字目にあるか文字位置をする方法を ご教授ください。
- みんなの回答 (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文字目ですね。
その他の回答 (3)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:-(M - 1) を書くのか否かは質問者の考え次第!
お礼
回答ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
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 既存の関数で無理な場合は自作するしか・・・。 実行結果は添付図を。
お礼
回答ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
ふつーに sub macro1() debug.print instr(1, strreverse("abcde"), strreverse("cd")) end sub とかで。
お礼
回答ありがとうございました。
お礼
回答ありがとうございました。