Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » Excel VBAで条件に合致する複数行を選択する

Excel VBAで条件に合致する複数行を選択する

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2507(ビルド19029.20184クイック実行)

「excel vba 複数行 選択」
といった検索キーワードで時折アクセスがあります。

何らかの条件に合致する複数の行を選択する、というニーズはあるように思います。

[スポンサードリンク]

条件に合致する複数行を選択するサンプルマクロ

以下のExcelマクロを実行すると、アクティブシートでA列が空白の行がすべて選択され、最後に
「〇行を選択しました。」
とメッセージが表示されます。

Sub A列が空白の行をすべて選択する()

 Dim target As Range
 
 Dim rng As Range, cnt As Long
 For Each rng In Range("A1", Cells(Rows.Count, "A").End(xlUp))
  
  If rng.Value = "" Then
   If target Is Nothing Then
    Set target = rng.EntireRow
   Else
    Set target = Union(target, rng.EntireRow)
   End If
   cnt = cnt + 1
  End If
 
 Next rng
 
 If Not target Is Nothing Then
  target.Select
  MsgBox cnt & "行を選択しました。"
 Else
  MsgBox "A列が空白の行はありません。"
 End If

End Sub

サンプルマクロで行っている処理

A列のデータの入力されているセルに対してFor Each~Nextループを回して、

 For Each rng In Range("A1", Cells(Rows.Count, "A").End(xlUp))


データが入力されていないときに、

  If rng.Value = "" Then

変数targetがNothingであれば、targetにRange.EntireRowプロパティで取得した、行全体を表すRangeオブジェクトを代入し、

   If target Is Nothing Then
    Set target = rng.EntireRow

変数targetがNothingでなければ、Unionメソッドで、変数targetに、targetにRange.EntireRowプロパティで取得した、行全体を表すRangeオブジェクトを追加しています。

   Else
    Set target = Union(target, rng.EntireRow)

選択終了後に、
「〇行を選択しました。」
メッセージを表示するための変数cntをインクリメントしています。

   cnt = cnt + 1
  End If

 Next rng

最後に変数targetに応じて、表示するメッセージを切り替えています。

 If Not target Is Nothing Then
  target.Select
  MsgBox cnt & "行を選択しました。"
 Else
  MsgBox "A列が空白の行はありません。"
 End If

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » Excel VBAで条件に合致する複数行を選択する

「行・列を表すRange」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.