SpecialCells(xlCellTypeVisible)还包括隐藏/过滤的单元格

时间:2017-02-20 18:21:21

标签: excel-vba vba excel

我有一个数据集,我正在使用过滤器。我只是想计算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)在宏中没有正常工作?

1 个答案:

答案 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