- ベストアンサー
検索文字が右から何文字目にあるか文字位置を取得
検索文字が右から何文字目にあるか文字位置を取得したいのですが 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が返ります。 複数の文字の検索文字が右から何文字目にあるか文字位置をする方法を ご教授ください。
- fjrbsmpqkkxux
- お礼率100% (30/30)
- オフィス系ソフト
- 回答数4
- ありがとう数6
- みんなの回答 (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)
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/7940)
ふつーに sub macro1() debug.print instr(1, strreverse("abcde"), strreverse("cd")) end sub とかで。
お礼
回答ありがとうございました。
関連するQ&A
- 引数 compareについて
エクセルで Sub sample() Debug.Print InStr(1, "abcde", "C", vbTextCompare) End Sub このコードを実行する際、vbTextCompareはどういう役目を果たしてるのでしょうか? Sub sample() Debug.Print InStr(1, "abcde", "C") End Sub や Sub sample() Debug.Print InStr(1, "abcde", "C", vbBinaryCompare) End Sub にすると0が返りますが、 なぜ0が返るのかわかりません。 ヘルプを読むと、vbTextCompareは 「テキスト モードの比較を行います。」と書いてありますが、それがどういう意味なのか分かりません。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbDatabaseCompare) End Sub にすると、エクセルで実行しているからかエラーになりました。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbUseCompareOption) End Sub これだと、コンパイルエラーになりました。
- ベストアンサー
- オフィス系ソフト
- InStr関数、InStrRev関数
Sub Sample() Debug.Print InStr(1, "abcde", "d") Debug.Print InStrRev("abcde", "d") End Sub どちらの関数も結果が4で、同じなのですが、InStrRevは2になるべきではないですか? なぜ左から検索してるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- computerNameを取得したい
UserNameではなく、computerNameを取得したい エクセルで複数人でファイルを開いてる場合、 コンピューター名を取得したいのですが Sub test1() Dim v As Variant v = ActiveWorkbook.UserStatus Debug.Print v(1, 1) End Sub これをやると、UserNameが取得されます。 UserStatusの中には、computerNameは格納されないのでしょうか? Sub test() Debug.Print Environ("computerName") End Sub で、自身のコンピューター名は取得できるのですが 複数ファイルを開いているときのみんなのコンピューター名を取得する方法を教えてください。
- 締切済み
- オフィス系ソフト
- 右から何文字目にあるか文字位置を取得するには?
関数で検索文字が右から何文字目にあるか文字位置を取得するには? FIND関数は左から検索文字が何文字目にあるかを取得しますよね。 右から取得するための関数は用意されてますか? vbaで言うと、StrReverse関数みたいなのはワークシート関数にはないのですか?
- ベストアンサー
- オフィス系ソフト
- 右からループするにはどうすればいいですか?
Sub test() For Each s In Worksheets Debug.Print s.Name Next End Sub これでシート名を取得する際は左から取得されますが 右からループするにはどうすればいいですか?
- ベストアンサー
- Excel(エクセル)
- エクセルvba 検索対象をシートではなく、ブック全
このコードでシート内に検索文字があるかどうかを取得できるのですが 検索対象をシートではなく、ブック全体にするには どうすればいいでしょうか? Sub Sample() If Not Cells.Find(What:="test", LookAt:=xlPart) Is Nothing Then Debug.Print "あります" Else Debug.Print "ありません" End If End Sub
- ベストアンサー
- オフィス系ソフト
- lenは文字数を取得する関数ですよね?
vbaで Sub test() Dim i As Long Debug.Print Len(i) End Sub とすると、4が返るのですが、なぜなのかまったくわかりません。 iには0が入っているので、一文字だから1が返ると思うのですが・・・
- ベストアンサー
- オフィス系ソフト
- Excel VBA テキストボックスの値の取得
テキストボックスの値が必要となり参照しようと思い、検索したところdebug.printにある3つの方法がヒットし、試して見ましたが、エラーになります。 テキストボックスの名前にはどれもtxtの文字を含んでいます。 Sub ShapeValue() Dim Shp As Shape For Each Shp In ActiveSheet.Shapes If InStr(Shp.Name, "txt") <> 0 Then Debug.Print Shp.TextFrame.Characters.Text 'オブジェクトは、このプロパティまたはメソッドをサポートしていません。 Debug.Print Shp.TextFrame2.TextRange.Text '指定された値は境界を超えています。 Debug.Print Shp.ShapeRange.TextFrame.Characters.Text 'オブジェクトは、このプロパティまたはメソッドをサポートしていません End If Next Shp End Sub どうすれば取得できるでしょうか?
- ベストアンサー
- Excel(エクセル)
- ブック内のシート名を右から取得したい
Sub Sample() Dim s As Worksheet For Each s In Worksheets Debug.Print s.Name Next End Sub このコードを実行すると、左からシート名をひとつずつ取得しますが 右から取得して書き出すにはどうすればいいでしょうか?
- ベストアンサー
- Excel(エクセル)
- VBA 複数の文字のコードを一気に返すには
Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございました。