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

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 Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples