スポンサーリンク

【VBA】テーブルの行を削除する方法(特定行/条件一致の行)

Excelのテーブル(ListObject)を扱うとき、「不要な行を削除したい」というケースはよくあります。
VBAでは ListRows.Delete を使うことで、特定の行や条件に一致する行を簡単に削除できます。

ここでは、

  1. 特定の行を削除する方法
  2. 条件に一致する行を削除する方法

について順に解説します。


スポンサーリンク

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. 実行前後のイメージ

実行前

商品名数量日付
商品X102025/10/01
商品A502025/10/02
商品Y202025/10/02

実行後(商品Aを削除)

商品名数量日付
商品X102025/10/01
商品Y202025/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 で削除できる
  • 条件一致の行はループ処理を使い、下から順に削除するのが安全
  • 空白行や特定の値に基づいた削除も可能

コメント

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