- ベストアンサー
検索文字が右から何文字目にあるか文字位置を取得
tsubuyukiの回答
そりゃぁ・・・ > 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文字目ですね。
関連する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 のようにするしかないのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございました。