【VBAリファレンス|実務向け】対象セルを含む行全体/列全体を参照する(EntireRow/EntireColumnプロパティ)|Excel VBA

スポンサーリンク

導入

Excel VBAでのデータ加工において、「特定の条件を満たすセルを見つけたら、その行を丸ごと削除する」あるいは「該当列の書式をまとめて変更する」といった処理は非常に頻繁に行われます。この時、わざわざ行番号や列番号を計算して範囲を指定するのは非効率的です。今回紹介するEntireRowおよびEntireColumnプロパティを活用すれば、対象セルを起点として、一瞬で「行全体」や「列全体」を操作対象に指定できます。実務のコードを短く、かつ読みやすくするために必須のスキルです。

基礎知識

VBAにおけるRangeオブジェクトには、その範囲を拡張して「行全体」や「列全体」を取得するプロパティが用意されています。

・EntireRowプロパティ:指定したセルを含む「行全体」を参照します。
・EntireColumnプロパティ:指定したセルを含む「列全体」を参照します。

これらは単体で使うだけでなく、Delete(削除)、Insert(挿入)、Clear(クリア)、Select(選択)、Interior.Color(背景色変更)といったメソッドやプロパティと組み合わせて使用するのが一般的です。

実装/解決策

実務で最も多い使い方は、条件一致したデータの「行削除」です。ここで重要なのが「下から上に向かってループさせる」という鉄則です。上から順に行を削除していくと、削除されるたびに下の行が繰り上がり、ループのインデックスと実際の行位置がズレて処理漏れが発生します。必ずループを逆順(Step -1)に設定してください。

サンプルプログラム

以下のコードは、A列の値が「0」である行をすべて削除する実務的なサンプルです。

Sub DeleteRowsExample()
Dim i As Long
Dim lastRow As Long

‘ A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

‘ 最終行から2行目に向かって逆順にループ処理(行削除の鉄則)
For i = lastRow To 2 Step -1
‘ A列の値が0の場合、そのセルが含まれる行全体を参照して削除
If Cells(i, 1).Value = 0 Then
Cells(i, 1).EntireRow.Delete
End If
Next i

MsgBox “処理が完了しました。”
End Sub

応用・注意点

1. 範囲選択の注意点:EntireRowを使用する際、単一セルだけでなく範囲(Range(“A1:C5”))を指定することも可能です。その場合、指定範囲に含まれるすべての行が対象となります。
2. 処理速度の向上:大量の行を削除する場合、1行ずつDeleteを実行すると処理に時間がかかります。件数が多い場合は、一度「削除対象の行」をUnionメソッドなどでまとめてから、最後に一度だけDeleteを実行すると高速化できます。
3. 誤削除の回避:EntireRow.Deleteは元に戻す(Ctrl+Z)ことができません。実務では実行前に「本当に削除して良いか」をユーザーに確認するMsgBoxを挟むか、バックアップを取る運用を推奨します。

タイトルとURLをコピーしました