Excelのテーブル(ListObject)を扱うとき、「不要な行を削除したい」というケースはよくあります。
VBAでは ListRows.Delete を使うことで、特定の行や条件に一致する行を簡単に削除できます。
ここでは、
- 特定の行を削除する方法
- 条件に一致する行を削除する方法
について順に解説します。
目次
1. 特定の行を削除する方法
テーブルの行は ListRows(行番号) で指定できます。
そのうえで Delete メソッドを実行すると、その行を削除できます。
サンプルコード(2行目を削除)
Sub テーブル行削除_特定行()
Dim ws As Worksheet
Dim lo As ListObject
Set ws = ThisWorkbook.Sheets("Sheet1")
Set lo = ws.ListObjects("Table1")
'2行目を削除
lo.ListRows(2).Delete
End Sub
ポイント
lo.ListRows(2)
→ データ部分の2行目を指定- ヘッダー行は含まれないので注意
- 削除後は下の行が自動的に詰められる
2. 条件に一致する行を削除する方法
実務では「特定の商品名の行を削除したい」など、条件に基づいて削除したいケースも多いです。
その場合は ループ処理で行をチェックし、条件一致したら削除します。
サンプルコード(「商品A」の行を削除)
Sub テーブル行削除_条件一致()
Dim ws As Worksheet
Dim lo As ListObject
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
Set lo = ws.ListObjects("Table1")
'下から上に向かってループ(行番号がずれないようにする)
For i = lo.ListRows.Count To 1 Step -1
If lo.DataBodyRange(i, 1).Value = "商品A" Then
lo.ListRows(i).Delete
End If
Next i
End Sub
ポイント
- 必ず下から上に向かってループするのが鉄則
→ 上から削除すると行番号がずれて正しく処理できない lo.DataBodyRange(i, 1)
→ データ部分の「i行目、1列目」を参照して条件判定
3. 実行前後のイメージ
実行前
商品名 | 数量 | 日付 |
---|---|---|
商品X | 10 | 2025/10/01 |
商品A | 50 | 2025/10/02 |
商品Y | 20 | 2025/10/02 |
実行後(商品Aを削除)
商品名 | 数量 | 日付 |
---|---|---|
商品X | 10 | 2025/10/01 |
商品Y | 20 | 2025/10/02 |
4. 応用例
- 複数条件で削除
If lo.DataBodyRange(i, 1).Value = "商品A" And lo.DataBodyRange(i, 2).Value < 100 Then lo.ListRows(i).Delete End If
- 空白行を削除
If Trim(lo.DataBodyRange(i, 1).Value) = "" Then lo.ListRows(i).Delete End If
5. まとめ
- 特定の行は
ListRows(番号).Delete
で削除できる - 条件一致の行はループ処理を使い、下から順に削除するのが安全
- 空白行や特定の値に基づいた削除も可能
コメント