【问题标题】:SpecialCells(xlCellTypeVisible) also includes hidden/filtered cellsSpecialCells(xlCellTypeVisible) 还包括隐藏/过滤的单元格
【发布时间】:2017-12-06 06:15:39
【问题描述】:

我有一个正在使用过滤器的数据集。我只是想计算 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 的范围...所以至少,我得到了正确的 end 行,但不是起始行。

但是!如果我在宏之外的即时窗口中键入Range("N2:N2047").SpecialCells(xlCellTypeVisible).Select,它会正确选择可见单元格。更进一步,正确执行?Range("N2:N2047").SpecialCells(xlCellTypeVisible).address 会返回$N$901:$N$937

可能出了什么问题?

编辑:我刚刚发现=SUBTOTAL(9,N1:N2047) 只会对可见单元格求和,所以我正在使用它。但我的问题仍然存在 - 为什么 SpecialCells(xlCellTypeVisible) 在宏中不能正常工作?

【问题讨论】:

  • 该功能对我来说可以正常工作。您如何隐藏不想包含的行? (也许正在做的事情有些有趣,这意味着 Excel 不会认为 .HiddenTrue。)
  • @YowE3K - 我只是在使用过滤器。我在列中有数据,并且我正在根据列过滤掉数据。我过滤掉了行2,并且在即时窗口中执行?Rows(2).Hidden 正确返回True。我也没有任何Worksheet_Change 类型的事件,唯一的宏就是我要问的那个。
  • 我尝试手动隐藏行,并使用过滤器隐藏行。这两种方法似乎都按预期工作。
  • @YowE3K - 看起来我的列 N 格式化为 General。我更改为Number,现在它按预期工作。耶! ...但我仍然想知道,为什么格式很重要?如果我在那里有文本并想对文本做点什么怎么办?如果我只想要可见的单元格,为什么格式对 VBA 很重要?还是只是 VBA 的一个怪癖?
  • 这是否意味着我们必须将问题关闭为“无法复制”? :D

标签: excel vba


【解决方案1】:

尝试使用以下行设置您的rng

Set rng = Range("N2:N" & Cells(Rows.Count, "N").End(xlUp).Row).SpecialCells(xlCellTypeVisible)

稍后使用您的调试行Debug.Print rng.Address,我在即时窗口中得到以下范围:

$N$901:$N$937

【讨论】:

  • 嗯,好主意,但我仍然收到$N$2:$N$937。它会以某种方式成为数据......?我没有做太多,实际上只是在一列上过滤,没有什么“花哨”的。我什至完全限定了该范围以使其在Sheet1 上运行。有没有更多信息。我能给吗?当然,我可以发布一些示例数据,但我觉得这更多地与我的 WB 相关,而不是数据本身。
  • @BruceWayne 它与您的数据或结构有关,我用不同的过滤范围进行了几次测试,结果很好。您在 J 列中有什么类型的格式?
  • 列 J 的格式为 Number。 N 列是General,但它们实际上是数字。让我将它们格式化为数字,然后再试一次。编辑:啊哈,我将 N 列更改为 Number,看起来它正在工作。 ……这很奇怪。为什么它不能与 General 一起使用?
猜你喜欢
  • 2016-07-05
  • 2023-02-25
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
相关资源
最近更新 更多