簡體   English   中英

在Excel VBA中刪除整行

[英]Delete entire row in Excel 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

但這是行不通的。 任何幫助請

您應該對.Cells屬性中的列使用整數值。

您還應該利用With...End With語句

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

使用= Empty而不是<> ""

如果Cell包含一些數據, <> ""將返回True

 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) = Empty And _
              Trim(Worksheets("Raw").Cells(Cnt, "F").Value) = Empty And _
              Trim(Worksheets("Raw").Cells(Cnt, "G").Value) = Empty Then

                Rows(Cnt).Delete

           End If
      Next Cnt
 End Sub

僅當AFG列中A所有單元格都不為空時,您的代碼才會刪除行。 因此,如果您需要刪除AFG空單元格的行,則應在代碼中使用=而不是<> ,它將可以正常工作。
此外,您可能還會遇到另一個問題,變量的integer類型具有有限的范圍(從-32768到32767),因此,如果使用范圍的行數超出該范圍,則會收到錯誤消息。
另外,在使用范圍不是從A1開始的情況下,請注意usedrange.rows.countusedrange.columns.count ,因為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(" AB")將返回"AB"
trim$("AB ")將返回"AB"
WorksheetFunction.Trim(" AB ")將返回"AB"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM