如果行A:J中没有数据,则尝试删除行

时间:2013-10-05 08:10:47

标签: excel excel-vba vba

如果没有来自A:J

的数据,我想删除一行

我找到了这段代码,并且一直在尝试编辑它,但这最终会删除整个工作表的数据。

非常感谢任何帮助

 Sub DeleteRows()
    Dim rngBlanks As Range
    Dim i As Integer

    For i = 1 To 10
        On Error Resume Next
        Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)
        On Error GoTo 0
        If Not rngBlanks Is Nothing Then
            rngBlanks.EntireRow.Delete
        End If
    Next
 End Sub

2 个答案:

答案 0 :(得分:1)

  

如果A行中没有数据,则尝试删除行:J

正在执行的代码是单独检查列,而不是标题所示的范围A:J。由于这个原因,您的整个数据很可能被删除。可以说A1有一些数据但B1没有。因此,您的代码将删除Row 1。您要做的是检查说A1:J1是否为空白。

我认为这是你在尝试的?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim rngBlanks As Range
    Dim i As Long, lRow As Long, Ret As Long

    '~~> Set this to the relevant worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2")

    With ws
        '~~> Get the last row in that sheet
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lRow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lRow = 1
        End If

        '~~> Loop through the rows to find which range is blank
        For i = 1 To lRow
            Ret = Application.Evaluate("=COUNTA(A" & i & ":J" & i & ")")
            If Ret = 0 Then
                If rngBlanks Is Nothing Then
                    Set rngBlanks = .Rows(i)
                Else
                    Set rngBlanks = Union(rngBlanks, .Rows(i))
                End If
            End If
        Next i
    End With

    '~~~> Delete the range
    If Not rngBlanks Is Nothing Then rngBlanks.Delete
End Sub

另一种方法是使用Autofilter删除那些范围

答案 1 :(得分:-1)

我用一张表中的一些非空白单元格在A:J行到第15行中插入代码。行16:18完全空白,D19 = 1。您希望从A:J。

中删除每个单元格中具有空白的行

在For..Next循环的第一次迭代中,rngBlanks并不是因为输入

?rngBlanks.address

退回$ A $ 1,$ A $ 5:$ A $ 19。 A2:A4不是空白。执行时

Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)

它会查找A列中的任何空白,而这不是您想要测试的空白。您希望测试每一行,可能在您的ActiveSheet.UsedRange中,以查看列A:J是否全部为空。所以你需要定义一个变量

Dim Rw as Range

并迭代UsedRange中的每个Rw

For Each Rw in ActiveSheet.UsedRange

If WorksheetFunction.CountBlank(range(cells(Rw,1),cells(Rw,10))) =0 Then

    Rw.EntireRow.Delete

我可以在这里发布完整的代码,但我给出的内容应该让你走上正轨。