【发布时间】:2019-02-21 01:23:19
【问题描述】:
我看到了一些不同的解决方案来绕过 excel 中过滤器的 2 个通配符限制(特别是发布的答案 here,但我很难理解他们在做什么。我正在尝试实施的工作是仅使用基本 countif 公式计算单元格中每个条件的实例数,如果为 0,则宏将隐藏该行。
With ws1
ColumnOne = .Cells(1, .Columns.Count).End(xlToLeft).Column
LastRow = .Cells(.Rows.Count, lastColumn).End(xlUp).Row
ColumnTwo = ColumnOne - 1
If ws2.Application.WorksheetFunction.CountA("D47:D61") <> 0 Then
For i = 1 To LastRow
If .Cells(i, ColumnTwo).Value = 0 Then
.Rows(i).EntireRow.Hidden = True
End If
Next i
ElseIf ws2.Application.WorksheetFunction.CountA("E47:E61") <> 0 Then
For i = 1 To LastRow
If .Cells(i, ColumnOne).Value = 0 Then
.Rows(i).EntireRow.Hidden = True
End If
Next i
Else
Exit Sub
End If
End With
上面的代码是我用来处理这个问题的。作为参考,单独的工作表 (ws2) 上有两列标准可以更改/完全为空。然后,上面的代码通过查看哪个不为空来检查它应该与哪些列一起使用(ws2 上的 D 使用 ws1 上的 ColumnTwo,ws2 上的 E 使用 ws1 上的 ColumnOne),然后开始检查 ws1 行上的列行以查看是否存在任何条件。如果不存在任何条件(单元格值 = 0),则它应该隐藏该行。
使用 D 或 E 的检查似乎不起作用。即使 ws2 上的 D47:D61 中的所有单元格都是空的,它仍然在该 if 语句中运行,而不是移动到 E47:E61。关于我应该在这里尝试和改变什么的任何想法?
【问题讨论】:
-
您能否更具体地说明什么不起作用?代码看起来没问题,你遇到了什么问题?
-
抱歉,我应该更具体一点 - 目前没有隐藏任何行,即使它们应该隐藏。我已经设置了一个示例,其中检查 0 的列有很多存在,但由于某种原因,这些行没有被隐藏。
-
我还遇到了一个问题,即在检查 ColumnTwo 时所有内容都被隐藏了,即使有很多单元格的值大于 0。
-
我很确定问题出在支票本身,因为即使 D47:D61 为空,它仍在第一个 if 语句中工作。也许它没有像我最初想要的那样引用工作表? D47:D61 在 ws2 上,但对 1 和 0(以及隐藏自身的行)的检查发生在 ws1 上。
-
lastColumn 在哪里被赋值(向下第 3 行)?在第 4 行添加断点 (wiseowl.co.uk/blog/s196/breakpoints.htm) - 将鼠标悬停在 lastRow 上时的值是多少?此外,如果 IF 语句的第二部分应该检查表 2,则不能使用 .Cells,则需要添加表,例如ws2.Cells