在Excel VBA中删除整行

时间:2016-02-26 09:13:44

标签: excel excel-vba vba

我在下面写了代码来删除A,F和G列中没有值的行。

Sub DeleteRawBlank()

  Dim Cnt As Long
  Dim RowCnt As Integer

  RowCnt = Worksheets("Raw").UsedRange.Rows.Count

  Worksheets("Raw").Activate

  For Cnt = RowCnt To 2 Step -1
   If Trim(Worksheets("Raw").Cells(Cnt, "A").Value) <> "" And  
      Trim(Worksheets("Raw").Cells(Cnt, "F").Value) <> "" And 
      Trim(Worksheets("Raw").Cells(Cnt, "G").Value) <> "" Then
         Rows(Cnt).Delete
   End If
 Next Cnt
End Sub

但它不起作用。请帮忙

3 个答案:

答案 0 :(得分:0)

您应该对.Cells属性中的列使用整数值。

您还应该利用With...End With Statement

Sub delete_row()
    Dim Cnt As Long
    Dim RowCnt As Integer
    Dim wb As Workbook, wsRaw As Worksheet

    Set wb = ThisWorkbook
    Set wsRaw = wb.Worksheets("Raw")

    With wsRaw
        RowCnt = .Range("A" & .Rows.Count).End(xlUp).Row

        For Cnt = RowCnt To 2 Step -1
            If Trim(.Cells(Cnt, 1).Value) <> "" And _
               Trim(.Cells(Cnt, 6).Value) <> "" And _
               Trim(.Cells(Cnt, 7).Value) <> "" Then
                Rows(Cnt).Delete
            End If
        Next Cnt
    End With
End Sub

答案 1 :(得分:0)

使用id int pk name varchar mobile varchare age int 代替= Empty

如果<> ""中包含一些数据,

<> ""将返回True

Cell

答案 2 :(得分:0)

只有当AFG列中的所有单元格都不为空时,您的代码才会删除行。因此,如果您需要删除AFG中空单元格的行,那么您应在代码中使用=代替<>,并且它会正常工作。
此外,您可能面临另一个问题,integer类型的变量具有有限的范围(从-32768到32767),因此如果您使用的范围的行数超出此范围,那么您将收到错误。
此外,如果使用范围不是从usedrange.rows.count开始,请注意usedrange.columns.countA1,因为UsedRange.Rows.Count计算使用范围内的行数,而不计算行中的行数工作表,因此使用范围中的行数不总是等于工作表中最后使用的行。

我已经尝试过简化您的代码,我认为它适用于您:

Sub DeleteRawBlank()
    Dim Cnt&, RowCnt&
    With Worksheets("Raw")
      RowCnt = .Cells.Find("*", , , , , xlPrevious).Row
      For Cnt = RowCnt To 2 Step -1
         If WorksheetFunction.Trim(.Cells(Cnt, "A") & .Cells(Cnt, "F") & .Cells(Cnt, "G")) = "" Then
           .Rows(Cnt).Delete
         End If
      Next Cnt
    End With
End Sub

还有一件事,trim将只删除左侧和右侧的空格,但不会删除字符串中的冗余空格,因此如果您需要删除所有冗余空格,则应使用WorksheetFunction.Trim 所以,它将如下例所示:

trim(" A B")将返回"A B"
trim$("A B ")将返回"A B"
WorksheetFunction.Trim(" A B ")将返回"A B"