我有一个数据集,我正在使用过滤器。我只是想计算N列中可见的总值。数据从第2行开始,到第2047行结束。
我看到了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)
在宏中没有正常工作?
答案 0 :(得分:2)
尝试使用以下行设置rng
:
Set rng = Range("N2:N" & Cells(Rows.Count, "N").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
稍后使用调试行Debug.Print rng.Address
,我会在即时窗口中获得以下范围:
$N$901:$N$937