空白セルを削除する VBA コード

空白セルを削除する VBA コード

これが機能しない理由をご存知ですか? 実行時エラー 1004: アプリケーション定義またはオブジェクト定義エラーが繰り返し発生します。最初のセルが空の場合は行のセクション全体を削除し、空でない場合は値を含む行が存在するまですべての空の行を削除しようとしています。これはスプレッドシートを簡単にクリーンアップするためです。コードを添付しました。ここに画像の説明を入力してください

Private Sub checkRows()

'H or 8
If IsEmpty(Range("A827").Value) = True Then
    Rows("825:925").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("827:925").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'G or 7
If IsEmpty(Range("A725").Value) = True Then
    Rows("723:823").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("725:823").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'F or 6
If IsEmpty(Range("A623").Value) = True Then
    Rows("621:721").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("623:721").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'E or 5
If IsEmpty(Range("A521").Value) = True Then
    Rows("519:619").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("521:619").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'D or 4
If IsEmpty(Range("A419").Value) = True Then
    Rows("417:517").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("419:517").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'C or 3
If IsEmpty(Range("A317").Value) = True Then
    Rows("315:415").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("317:415").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'B or 2
If IsEmpty(Range("A215").Value) = True Then
    Rows("213:313").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("215:313").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'A or 1
If IsEmpty(Range("A113").Value) = True Then
    Rows("111:211").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("113:211").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'RP
If IsEmpty(Range("A9").Value) = True Then
    Rows("7:107").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("9:107").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

End Sub

VBA ウィンドウ

答え1

列参照では使用できませんRows()。最初の部分を行のみに変更してください。

If IsEmpty(Range("A827").Value) = True Then
    Rows("825:925").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("827:925").EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

あるいは、Range("A825:A925").EntireRow.Delete ...

答え2

「ターゲット」範囲引数が使用されていないため、行メソッドを正しく使用していません。これが静的範囲である場合は、次のようなものを使用することをお勧めします。

Private Sub RemoveRows()

  If IsEmpty(ActiveSheet.Range("A827").Value) = True Then ActiveSheet.Range("A827:A925").Clear

End Sub

範囲引数を渡す場合は、完全な範囲オブジェクトではなく、範囲の文字列値を渡すことをお勧めします。

Private Sub RemoveRows(ByVal TargetRange As String)

If IsEmpty(ActiveSheet.Range("A827").Value) = True Then ActiveSheet.Range(TargetRange).Clear

End Sub

これを使用するには、範囲の文字列表現を引数として渡すだけです。

Private Sub CallRemoveRows()

RemoveRows ("A827:A895")

End Sub

関連情報