我有一个数据集,我正在使用过滤器。我只是想计算N列中可见的总值。数据从第2行开始,到第2047行结束。SpecialCells(xlCellTypeVisible)也包含隐藏/过滤的单元格
我看到了this thread,但它给了我同样类型的问题。
这里是我的功能:
Function sumVisible() As String
Dim rng As Range
Set rng = Range("N2:N2047").SpecialCells(xlCellTypeVisible)
' Debug.Print "Range: " & rng.Address & ", Sum: " & WorksheetFunction.Sum(rng)
sumVisible = Format(WorksheetFunction.Sum(rng), "$#,###.##")
End Function
从我目前的过滤器,我的标题行(1)是可见的,因为是行901至937.所以,我想总结N901:N937。
但是,rng
始终设置为$N$2:$N$2047
。我预计它是$N$901:$N$937
。
使用的是给我联系上述线程的功能,我得到了一系列的$N$2:$N$937
...所以最起码,我得到正确的年底行,但不是起始行。
但是!如果我在立即窗口中键入Range("N2:N2047").SpecialCells(xlCellTypeVisible).Select
,在宏的外面,它正确地选择可见单元格。还有一步,?Range("N2:N2047").SpecialCells(xlCellTypeVisible).address
正确返回$N$901:$N$937
。
什么可能会出错?
编辑:我刚刚发现做=SUBTOTAL(9,N1:N2047)
只会求和可见的单元格,所以我正在使用它。但我的问题仍然存在 - 为什么不是SpecialCells(xlCellTypeVisible)
在宏中正常工作?
功能正常工作对我来说。你如何隐藏你不想包含的行? (也许有一些有趣的事情正在进行,这意味着Excel不会认为'.Hidden'是'True'。) – YowE3K
@ YowE3K - 我只是简单地使用过滤器。我有列中的数据,而且我正在根据列过滤出数据。我将行'2'过滤出来,并在立即窗口中执行'?行(2)。隐藏',正确返回'真'。我没有任何'Worksheet_Change'类型的事件,唯一的宏是我问的那个。 – BruceWayne
我尝试手动隐藏行,并使用过滤器来隐藏行。这两种方法似乎都按预期工作。 – YowE3K