Excel VBA删除具有特定条件的某些行

时间:2016-11-18 09:39:35

标签: excel vba excel-vba macros

我在网上发现了一个有效的代码,但我没有按照我的目的改变它。我的电子表格中的每个条目都包含不同的公式以及Iferror函数,目的是使包含错误消息的单元格显示为空白。例如,假设单元格E3依赖于具有特定公式的单元格F3(为了澄清,可以说F3 / 2.5)。很明显,如果单元格F3中没有条目,则在单元格E3中将显示错误消息。因此,我使用IFERROR函数将单元格显示为空白。单击宏按钮后我想删除空白行时出现困难。但是,由于该单元格确实有一个条目(一个公式反过来又返回一条错误消息),该单元格不会删除。此外,我需要在3个不同的选择范围内运行此代码。请有人帮忙!我找到的代码来自这个论坛的另一个主题,是:

 `sub foo()
  dim r As Range, rows As Long, i As Long
  Set r = ActiveSheet.Range("A1:Z50")
  rows = r.rows.Count
    For i = rows To 1 Step (-1)
  If WorksheetFunction.CountA(r.rows(i)) = 0 Then r.rows(i).Delete
    Next
  End Sub`

非常感谢!

1 个答案:

答案 0 :(得分:0)

编辑:如果语句添加到自动过滤器,因为它在没有空格时删除了一行

您需要在电子表格中设置一个包含以下sumproduct的列:

=SUMPRODUCT((LEN(A1:F1)>0)*1)

这是计算有多少单元格的值长度大于0,因此不是空白,当我测试一小部分假数据时,您需要相应地调整单元格引用。

在此之后你可以循环:

For i = rows To 1 Step (-1)
    If Cells(i,"G") = 0 Then r.rows(i).Delete 'My formula is in column "G"
Next

或设置自动过滤器并删除可见单元格的整行:

Dim lrow As Integer

If Not WorksheetFunction.CountIf(Range("G:G"), "0") = 0 Then
Range("A1:G1").AutoFilter
Range("A1:G1").AutoFilter Field:=7, Criteria1:="0"
lrow = Cells(rows.Count, 7).End(xlUp).Row + 1
Range("G2:G" & lrow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
Range("A1:G1").AutoFilter
End If

使用前导列计算此问题的唯一问题是,如果您需要补充公式,那么您需要补充公式,但是您可以在代码中使用自动完成。