VBAで自動化 VBA一覧 セル・値の取得と貼り付け 部分一致

【VBA】特定の文字を含む行の処理:検索・削除・別シートにコピー

Excel で特定の文字列を含む行を検索、強調表示したり、削除、コピーなどの操作を行うことは、データ処理で頻繁に求められる作業です。Excel VBA を使用することで、これらの操作を効率的に自動化できます。

特定の文字を含む行を検索して処理する方法を、基本的な方法から活用例まで解説します。

特定の文字を含む行を検索する

Cells特定の文字を検索するには、Findメソッドを使用します。

【VBA】Findメソッド:基本構文と使用例

コード例: 特定の文字を含む行を検索

シート内のデータから「Apple」という文字列を含む行を検索して、その行番号を表示します。

Sub FindRowWithSpecificText()

Dim ws As Worksheet
Dim cell As Range

Set ws = ThisWorkbook.Sheets("Sheet1")

' シート内で "Apple" を検索
Set cell = ws.Cells.Find(What:="Apple", LookIn:=xlValues, LookAt:=xlPart)

If Not cell Is Nothing Then

MsgBox "文字列 'Apple' を含むのは行 " & cell.Row & " です。"

Else

MsgBox "文字列 'Apple' は見つかりませんでした。"

End If

End Sub

解説

  • Findメソッドを使用して文字列を検索します。
  • LookAt:=xlPartこれにより、セル内の部分一致を指定しています。完全一致の場合はLookAt:=xlWholeを使用します。

特定の文字を含む行を強調表示する

特定の文字列を含む行の背景色を変更することで、視覚的に強調表示できます。

コード例: 特定の文字を含む行を強調表示

Sub HighlightRowsWithSpecificText()

Dim ws As Worksheet
Dim cell As Range
Dim searchText As String

Set ws = ThisWorkbook.Sheets("Sheet1")
searchText = "Apple" ' 検索文字列

' データ範囲をループ
For Each cell In ws.UsedRange

If InStr(cell.Value, searchText) > 0 Then

ws.Rows(cell.Row).Interior.Color = RGB(255, 255, 0) ' 行の背景色を黄色に

End If

Next cell

MsgBox "特定の文字を含む行を強調表示しました。"

End Sub

解説

特定の文字を含む行を削除

特定の文字列を含む行を削除する場合、ループで判定しながら削除を行います。

コード例: 特定の文字を含む行を削除

Sub DeleteRowsWithSpecificText()

Dim ws As Worksheet
Dim cell As Range
Dim searchText As String
Dim i As Long

Set ws = ThisWorkbook.Sheets("Sheet1")
searchText = "Apple" ' 検索文字列

' データ範囲を逆順にループ
For i = ws.UsedRange.Rows.Count To 1 Step -1

If InStr(ws.Cells(i, 1).Value, searchText) > 0 Then

ws.Rows(i).Delete

End If

Next i

MsgBox "特定の文字を含む行を削除しました。"

End Sub

解説

  • 逆順 ( Step -1) でループするので、行削除によるインデックスのずれを防ぎます。
  • Cells(i, 1)特定の列を判定しています。他の列も対象にしたい場合は範囲​​全体をループさせます。

特定の文字を含む行を別シートにコピー

特定の文字列を含む行を抽出して、別のシートにコピーする方法です。

コード例: 特定の文字を含む行をコピー

Sub CopyRowsWithSpecificText()

Dim sourceWs As Worksheet
Dim targetWs As Worksheet
Dim cell As Range
Dim searchText As String
Dim targetRow As Long

Set sourceWs = ThisWorkbook.Sheets("Sheet1")
Set targetWs = ThisWorkbook.Sheets("Sheet2")
searchText = "Apple" ' 検索文字列
targetRow = 1 ' コピー先の開始行

' データ範囲をループ
For Each cell In sourceWs.UsedRange

If InStr(cell.Value, searchText) > 0 Then

sourceWs.Rows(cell.Row).Copy Destination:=targetWs.Rows(targetRow)
targetRow = targetRow + 1 ' 次の行にコピー

End If

Next cell

MsgBox "特定の文字を含む行をコピーしました。"

End Sub

解説

  • Rows(cell.Row).Copyで行全体をコピーし、Destination指定して貼り付けます。
  • targetRowをカウントアップすることで、コピー先の行を順番に移動します。

注意点とベストプラクティス

  1. パフォーマンスの相当
    量のデータを処理する場合、不要なループや範囲の絞り込みに注意し、UsedRange特定の列の指定を活用しましょう。【VBA】UsedRangeプロパティ:最終行と最終列数
  2. 部分一致と完全一致
    必要に応じて、InStrFindメソッドのオプションで部分一致 ( xlPart) と完全一致 ( xlWhole) を使ってください。
  3. エラーハンド
    検索結果がない場合の処理​​を設定して、意図しない動作を防止できます。【VBA】エラーを無視して終了する方法:エラーハンドリング

まとめ

Excel VBA を使用して特定の文字を含む行を操作する方法を学べば、データの検索や操作を効率化できます。

  • 検索:FindInStrを使用して特定の文字を検索。
  • 強調表示: 条件に一致する行の背景色を変更します。
  • 削除・コピー: 特定の行を削除し、別のシートにコピー。
  • 範囲の最適化: 処理範囲を適切に絞り、効率的に操作します。

-VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 部分一致