0

これにはループ機能が必要だと思いますが、どうすればよいかわかりません。

このタスクは、特定の列が空白かどうかを確認してから、その行を削除することです。しかし、空白のセルがなく、デバッグ終了エラーが発生することがあります。

これが私のコードです:

Sub DeleteRow()
Dim lr As Long
Dim shCurrentWeek As Worksheet
Set shCurrentWeek = AciveWorkbook.Sheets("Current Week")
lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row 

'Delete Row
shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

何か案は?

4

4 に答える 4

3

on error resume next行の直前に置くのはどうDeleteですか?このような:

On error resume next
shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

失敗しても気にしないと仮定しているので、エラー トラップを行う必要はありません。これにより、 への呼び出しからセルが返されない場合にエラー メッセージが表示されなくなりますSpecialCells

于 2012-12-06T18:04:25.307 に答える
2

ダニエル・クックは正しいですが、を使用できますが、使用は実際にはVBA(IMO)の最後の手段であるOn Error Resume Nextため、別の方法があります。On Error Resume Next

SpecialCells以下のコードは、メソッドを使用する前に空白をチェックします。

Option Explicit

Sub DeleteRow()

Dim lr As Long
Dim shCurrentWeek As Worksheet

Set shCurrentWeek = ActiveWorkbook.Sheets("Current Week")
lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row

If Application.WorksheetFunction.CountBlank(shCurrentWeek.Range("B4:B" & lr)) <> 0 Then

    shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End If


End Sub
于 2012-12-06T18:26:55.343 に答える
1

これが私がそのタイプの操作に使用するコードの一部です。

サブClearBlank()

Dim i As Long

For i = Range( "B65536")。End(xlUp).RowTo8ステップ-1IfIsEmpty
(Cells(i、4))Then Rows(i).Delete

次の私

サブ終了

これがお役に立てば幸いです。

于 2012-12-06T19:23:14.780 に答える
0

今日までVBAを使用していなかったので、より適切な方法があると確信しています...しかし、このコードは、少なくとも1つの空のセルがある行を削除します。これは、ヘッダー行があり、最初の列がIDに使用されているため、これらのセルが「見られない」ことを前提としています。

このスクリプトの良いところは、どのサイズのスプレッドシートでも機能するため、毎回値をハードコーディングする必要がないことです。

Sub DeleteIncompleteRows()
Dim row As Integer, col As Integer
Dim deleted As Integer
deleted = 0
Dim actualRow As Integer
Dim totalRows As Integer
Dim totalCols As Integer
totalRows = Application.CountA(Range("A:A"))
totalCols = Application.CountA(Range("1:1"))

For row = 2 To totalRows
actualRow = row - deleted
For col = 2 To totalCols
If ActiveSheet.Cells(actualRow, col).Value = "" Then
ActiveSheet.Rows(actualRow).Delete
deleted = deleted + 1
Exit For
End If
Next col
Next row
End Sub

ではごきげんよう、

スコット

于 2013-01-17T21:39:57.043 に答える