セルの値に基づいて行を削除または挿入する
In this Article
このチュートリアルでは、セルの値に基づいて行を削除または挿入する方法について説明します。
セルの値に基づいて行を削除する
これは、ある範囲をループし、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