更新日:、 作成日:
VBA 文字列を検索する
はじめに
Excel VBA マクロの文字列 (String) を検索する方法を紹介します。
「InStr 関数」から、文字列を検索できます。
見つかった位置を取得できます。見つからないときは 0 になります。
大文字と小文字、半角と全角、ひらがなとカタカナを区別するかしないかを選択できます。
Unicode 文字を扱うには「文字コードを変換や判定する」をご覧ください。
文字列を検索する
「InStr 関数」を使用して、文字列を検索できます。最初に見つかった位置を取得できます。見つからないときは 0 を返します。
引数には (検索元, 検索ワード) を指定します。
Dim l As Long
l = InStr("ABCDEF", "C") ' C を検索する
Debug.Print(l) ' 3
l = InStr("ABCDEF", "あ") ' あ を検索する
Debug.Print(l) ' 0
すべて検索
キーワードが複数見つかるときは、最初に見つかった位置を取得します。2 番目以降に見つかった位置を取得したいときは、第 1 引数に検索の開始位置を指定できます。1 が最初の文字です。
このときの引数には (開始位置, 検索元, 検索ワード) を指定します。「InStr 関数」は最初の引数を省略できる変わった関数です。
Dim l As Long ' 開始位置
l = 0
Do
l = InStr(i + 1, "ABCABCABC", "A") ' A をすべて検索する
Debug.Print(l) ' 1 4 7 0
Loop Until i = 0
0 が返ってきたら、すべて検索したことになります。
大文字と小文字
第 4 引数で「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別できます。この引数を指定するときは、必ず第 1 引数の開始位置も指定する必要があります。
- vbBinaryCompare (既定):区別する
- vbTextCompare:区別しない
Dim l As Long
l = InStr(1, "abcABC", "A", vbBinaryCompare) ' 区別する
Debug.Print(l) ' 4
l = InStr(1, "abcABC", "A", vbTextCompare) ' 区別しない
Debug.Print(l) ' 1
l = InStr(1, "アイウアイウ", "ア", vbBinaryCompare) ' 区別する
Debug.Print(l) ' 4
l = InStr(1, "アイウアイウ", "ア", vbTextCompare) ' 区別しない
Debug.Print(l) ' 1
l = InStr(1, "あいうアイウ", "ア", vbBinaryCompare) ' 区別する
Debug.Print(l) ' 4
l = InStr(1, "あいうアイウ", "ア", vbTextCompare) ' 区別しない
Debug.Print(l) ' 1
スポンサーリンク
後ろから文字列を検索する
「InStrRev 関数」を使用して、文字列を後ろから検索できます。最初に見つかった左からの位置を取得できます。見つからないときは 0 を返します。
引数には (検索元, 検索ワード) を指定します。
Dim l As Long
l = InStrRev("ABCABC", "A") ' A を後ろから検索する
Debug.Print(l) ' 4
l = InStrRev("ABCABC", "あ") ' あ を後ろから検索する
Debug.Print(l) ' 0
開始位置を指定したり、大文字と小文字を区別するか選択もできます。
セルの値を検索する
Range.Find メソッドから、セルの値を検索できます。
セルの範囲「A1」~「B2」の 検索 を検索するには Range("A1:B2").Find("検索") を入力します。
Dim c As Range
Set c = Range("A1:B2").Find("検索", SearchOrder:=xlByRows) ' 行方向に検索
Set c = Range("A1:B2").Find("検索", , xlFormulas, xlPart, xlByRows, xlNext, False, False, False)
Debug.Print(c.Address) ' $B$1
Set c = Range("A1:B2").Find("検索", SearchOrder:=xlByColumns) ' 列方向に検索
Set c = Range("A1:B2").Find("検索", , xlFormulas, xlPart, xlByColumns, xlNext, False, False, False)
Debug.Print(c.Address) ' $A$2
詳しくは「セルを検索する」をご覧ください。