VBAで自動化

【VBA】文字列のセル位置を検索する方法

Excel VBAでセル範囲の文字列の位置を検索する場合には、各セルをループで処理し、それぞれのセルの値に文字列検索を行うことが一般的です。
まずは文字列の位置を検索する InStr 関数に関して解説しています。この関数は、一つの文字列(検索文字列)の中に別の文字列(検索語)が最初に現れる位置を返します。

InStr関数の基本構文

position = InStr([start], string1, string2, [compare])

  • start: 検索を開始する位置。(省略した場合は 1 から検索が始まります。)
  • string1: 検索対象の文字列。
  • string2: string1の中で検索する文字列。
  • compare: 文字列比較の方法。(省略可能)
  • position: string2がstring1で見つかった位置。見つからなかった場合は 0 です。

InStr関数の使用例

InStr関数の必須項目の検索対象の文字列と検索する文字だけ使用した使用例です。
検索対象の文字列(=変数mainStringに格納している文書)に対して、検索語(=変数searchStringに格納している単語)が何文字目から始まるかメッセージボックスで表示するサンプルコードです。
検索対象の文字列に2回検索語がでたとしても、最初の文字しかお知らせしません。

Sub FindStringPosition()
Dim mainString As String
Dim searchString As String
Dim position As Integer

mainString = "ExcelVBAプログラミング"
searchString = "VBA"

position = InStr(mainString, searchString)

If position > 0 Then
MsgBox searchString & "は位置" & position & "で見つかりました。"
Else
MsgBox searchString & "は" & mainString & "の中に見つかりませんでした。"
End If
End Sub

検索開始位置を指定した使用例

検索開始位置を指定したInStr関数の使用例です。
検索対象の文字列(=変数mainStringに格納している文書)の10文字目から検索語(=変数searchStringに格納している単語)があった場合に、何文字目から始まるかメッセージボックスで表示するサンプルコードです。
1文字目から9文字目に検索語があってもスルーします。

Sub FindStringPositionWithStart()
Dim mainString As String
Dim searchString As String
Dim position As Integer
Dim start As Integer

mainString = "ExcelVBAプログラミングVBA"
searchString = "VBA"
start = 10 '検索開始位置

position = InStr(start, mainString, searchString)

If position > 0 Then
MsgBox searchString & "は位置" & position & "で見つかりました。"
Else
MsgBox searchString & "は位置" & start & "以降には見つかりませんでした。"
End If
End Sub

文字列の大文字・小文字を「区別する/区別しない」指定方法

compare 引数で指定ができます。vbBinaryCompare とvbTextCompare が使用されます。

  • vbBinaryCompare: 大文字と小文字を区別して比較します。
  • vbTextCompare: 大文字と小文字を区別せずに比較します。

position = InStr(1, mainString, searchString, vbTextCompare)

文字列検索でセルの位置を検索する方法

Sheet1のA1からC10の範囲で、「VBA」の文字列を検索するコードです。
指定した範囲内の各セルの内容を順に検索し、検索文字列が見つかった場合にそのセルのアドレスと文字列が見つかった位置をメッセージボックスで表示します。

Sub FindStringInRange()
Dim rng As Range
Dim cell As Range
Dim mainString As String
Dim searchString As String
Dim position As Integer

' 検索対象の範囲を設定します。ここでは、シート1のA1からC10までの範囲を対象とします。
Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1:C10")
searchString = "VBA" ' 検索する文字列

' rng内の各セルに対して検索を行います。
For Each cell In rng
mainString = cell.Value ' セルの値をmainStringに設定
position = InStr(mainString, searchString) ' InStr関数で検索

If position > 0 Then
MsgBox "セル " & cell.Address & " に " & searchString & " が位置 " & position & " で見つかりました。"
End If
Next cell
End Sub

文字列検索でセルの位置を一覧でだす方法

Sheet1のA1からC10の範囲で、「VBA」の文字列が含まれるセルの一覧を表示するコードです。
指定した範囲内の各セルの内容を順に検索し、検索文字列が見つかった場合にそのセルのアドレスを一覧をメッセージボックスで表示します。

Sub FindStringAndList()
Dim rng As Range
Dim cell As Range
Dim mainString As String
Dim searchString As String
Dim position As Integer
Dim foundCells As String

Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1:C10")
searchString = "VBA"
foundCells = ""

For Each cell In rng
mainString = CStr(cell.Value)
position = InStr(mainString, searchString)

If position > 0 Then
foundCells = foundCells & cell.Address & ", "
End If
Next cell

If Len(foundCells) > 0 Then
foundCells = Left(foundCells, Len(foundCells) - 2) ' Remove trailing comma and space
MsgBox searchString & "が以下のセルで見つかりました:" & vbCrLf & foundCells
Else
MsgBox searchString & "は指定された範囲に見つかりませんでした。"
End If
End Sub

-VBAで自動化