使用VBA删除Excel工作表中的特定行

时间:2018-10-09 16:57:45

标签: excel vba excel-vba

我有一个包含多列的表。我想删除表中的特定行。删除逻辑如下:

如果在B列中一个单元格包含一个特定值,在这种情况下,让我们坚持“示例”,我想在符合条件的行之后删除以下两行。

请务必注意,条件可能在表中出现多次,并且表的长度可能不同。

我的想法如下:

1. Identify all rows which contain "example" in column B
2. Store the row numbers in a variable
3. Go through the variable and create a new one which has twice the length of the first one and write the two following rows into the 2nd variable
4. Use the 2nd variable to delete the rows with that numbers.

不幸的是,我对VBA完全陌生,无法对其进行编码。我也尝试过一起复制代码,但是找不到针对我特定主题的解决方案。

2 个答案:

答案 0 :(得分:1)

这是您的方法的一个很小的修改

  • 从列 B 底部开始,向上。
  • 如果遇到“示例” ,请删除下面的两行

因此,如果第7行包含“ example” ,请删除第7行和第8行

之前:

enter image description here

代码:

Sub RowKiller()
    Dim N As Long, i As Long, t As String
    t = "example"
    N = Cells(Rows.Count, "B").End(xlUp).Row

    For i = N To 1 Step -1
      If Cells(i, "B") = t Then
          Range(Cells(i + 1, "B"), Cells(i + 2, "B")).EntireRow.Delete
      End If
    Next i
End Sub

及之后:

enter image description here

答案 1 :(得分:0)

相反,我认为处理此问题的最佳方法是:

  1. 从最后到第一遍遍所有填充的行。 (这可以确保在删除行时不会将地毯从下方拉出)。
  2. 如果在该行的B列中找到“示例”,请删除该行之后的两行(我们已经遍历了这些行,因此删除应该没什么大不了的
  3. 就这样。

    子deleteRows()

     Dim lastRow as Long
     'get the last row
     lastRow = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
    
     'Now work backwards
     Dim i As Long
     For i = lastRow to 1 Step -1 'change that 1 to whatever your first row is
         If Sheet1.Cells(i, 2).value = "Example" Then
             Sheet1.Rows(i + 1 & ":" & i + 2).Delete
         End If
     Next i
    

    结束子

我还没有测试过,但是看起来不错。您可能需要在其中进行一些调整,但这肯定会带您进入球场。