2016-11-18 139 views
0

我在网上找到了一个可以正常工作的代码,但是我无法将其更改为我的用途。我的电子表格中的每个条目都包含不同的公式以及Iferror函数,目的是使包含错误消息的单元格显示为空白。例如,让我们说一个单元格E3依赖于具有一定公式的单元格F3(澄清可以说是F3/2.5)。很显然,如果单元格F3中没有条目,则在单元格E3中将显示错误消息。出于这个原因,我使用IFERROR函数来显示单元格为空白。当我想要在点击宏按钮后删除空行时出现困难。但是,由于该单元格有一个条目(一个公式返回错误消息),该单元格不会删除。另外我需要在3个不同的选择范围内运行此代码。请有人帮忙!我发现的代码是从这个论坛上的不同线程,是:Excel VBA在某些条件下删除某些行

`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

您可以发布您的代码更改,以便我们可以帮助您吗? – RCaetano

+0

如果你只是检查列E说'如果Cells(i,5).Value =“”然后r.rows(i).Delete' –

+0

@蒂姆....如果我想检查整个范围? – Syed

回答

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 

使用领先列的唯一问题为此计算是,如果你有很多数据来来去去,你需要补充公式,尽管你可以在代码中使用自动完成。

+0

非常感谢! – Syed