セルの値に基づいて行を削除または挿入する

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 7月 6, 2022

このチュートリアルでは、セルの値に基づいて行を削除または挿入する方法について説明します。

セルの値に基づいて行を削除する

これは、ある範囲をループし、A列が「削除」となっている行を削除します。

Sub DeleteRowsBasedonCellValue()

'変数の宣言
Dim LastRow As Long, FirstRow As Long
Dim Row As Long

With ActiveSheet
    '最初の行と最後の行を定義する
    FirstRow = 1
    LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    '行をループする(下から上へ)
    For Row = LastRow To FirstRow Step -1
        If .Range("A" & Row).Value = "削除" Then
            .Range("A" & Row).EntireRow.Delete
        End If
    Next Row
End With

End Sub

行を削除するとデータが移動し、上から下へループすると行がスキップされるため、ループは最下行から開始する必要があります。

また、最後の行を手動で入力する代わりに、最後に使用された行を計算していることに注意してください。

フィルターに基づいて行を削除する

前の例では、行をループして、条件を満たす行を削除しました。その他の方法として、Excelのオートフィルターを使って、ある基準に基づいて行をフィルターし、表示されている行を削除することもできます。

Sub FilterAndDeleteRows()

    '変数wsの宣言
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    '既存のフィルタをリセットする
    On Error Resume Next
    ws.ShowAllData
    On Error GoTo 0

    'フィルタの適用
    ws.Range("a1:d100").AutoFilter Field:=1, Criteria1:="削除"
    
    '行を削除する
    Application.DisplayAlerts = False
    ws.Range("a1:d100").SpecialCells(xlCellTypeVisible).Delete
    Application.DisplayAlerts = True
    
    'フィルタのクリア
    On Error Resume Next
    ws.ShowAllData
    On Error GoTo 0
  
End Sub

セルの条件に基づいて行を削除する

これは、A列のセルが特定の条件(< 0)を満たす場合に行を削除して、範囲をループします。

Sub DeleteRowsBasedonCellValue()

'変数の宣言
Dim LastRow As Long, FirstRow As Long
Dim Row As Long

With ActiveSheet
    '最初の行と最後の行を定義する
    FirstRow = 1
    LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    '行をループする(下から上へ)
    For Row = LastRow To FirstRow Step -1
        If .Range("A" & Row).Value < 0 Then
            .Range("A" & Row).EntireRow.Delete
        End If
    Next Row
End With

End Sub

セルが空白の場合に行を削除する

A列のセルが空白の場合に行を削除するループ処理を行います。

Sub DeleteRowsBasedonCellValue()

'変数の宣言
Dim LastRow As Long, FirstRow As Long
Dim Row As Long

With ActiveSheet
    '最初の行と最後の行を定義する
    FirstRow = 1
    LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    '行をループする(下から上へ)
    For Row = LastRow To FirstRow Step -1
        If .Range("A" & Row).Value = "" Then
            .Range("A" & Row).EntireRow.Delete
        End If
    Next Row
End With

End Sub

空白行を削除する

行全体が空白の場合に行を削除したい場合は、次のコードを使用します(少し異なる方法については、リンクをクリックしてください)。

Sub DeleteBlankRows()
 
'変数の宣言
Dim LastRow As Long, FirstRow As Long
Dim Row As Long
 
With ActiveSheet
    '最初の行と最後の行を定義する
    FirstRow = 1
    LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
 
    '行をループする(下から上へ)
    For Row = LastRow To FirstRow Step -1
        If WorksheetFunction.CountA(.Rows(Row)) = 0 Then
            .Rows(Row).EntireRow.Delete
        End If
    Next Row
End With
 
End Sub

セルに値が含まれている場合に行を削除する

このコードは、A列のセルが空白でない場合に行を削除するように、範囲をループします。

Sub DeleteRowsBasedonCellValue()

'変数の宣言
Dim LastRow As Long, FirstRow As Long
Dim Row As Long

With ActiveSheet
    '最初の行と最後の行を定義する
    FirstRow = 1
    LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    '行をループする(下から上へ)
    For Row = LastRow To FirstRow Step -1
        If .Range("A" & Row).Value <>"" Then
            .Range("A" & Row).EntireRow.Delete
        End If
    Next Row
End With

End Sub

セルの値に基づいて行を挿入する

これは、範囲をループし、その行の特定のセルが「挿入」となっている行に挿入します。

Sub InsertRowsBasedonCellValue()

'変数の宣言
Dim LastRow As Long, FirstRow As Long
Dim Row As Long

With ActiveSheet
    '最初の行と最後の行を定義する
    FirstRow = 1
    LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    '行をループする(下から上へ)
    For Row = LastRow To FirstRow Step -1
        If .Range("A" & Row).Value = "挿入" Then
            .Range("A" & Row).EntireRow.Insert
        End If
    Next Row
End With

End Sub
vba-free-addin

VBAコード例アドイン

当サイトで紹介しているすべてのコード例に簡単にアクセス可能。

メニューから選択してクリックするだけで、コードがモジュールに直接挿入されます(.xlam アドイン)。

(インストール不要!)

無料ダウンロード

VBAコード例に戻る