【问题标题】:VBA - Need to report cell format only of viewable cells after filteringVBA - 过滤后只需要报告可查看单元格的单元格格式
【发布时间】:2020-07-03 14:56:48
【问题描述】:

我对 Excel VBA 中的宏有疑问。 我想在 Excel 中获取彩色单元格的数量,所以我编写了以下代码:

Application.ScreenUpdating = False
x = Range("D2:Y46").Select

For Each d In Selection 
    d.Select 
    If Selection.Interior.Color = 15773696 Then
        Count = Count + 1 
    End If 
Next

Application.ScreenUpdating = True 
Range("C53").Select 
Selection = Count

它工作正常,但是由于标题过滤器而隐藏了一些行。

当我使用上面的代码时,它也会显示隐藏单元格的输出,但我不希望结果包含隐藏单元格。在标题中过滤后,我只需要可查看单元格的结果。

有什么办法吗?

【问题讨论】:

标签: excel vba macos


【解决方案1】:

我已经修改了您的代码来满足您的要求,同时也提高了效率;在对单元格进行操作之前,您通常不需要Select

Option Explicit

Sub CountCellsByColor()

Dim d As Range, x As Range
Dim Count As Integer
Application.ScreenUpdating = False

Set x = Range("D2:Y46")

For Each d In x
    If d.Interior.Color = 15773696 And Not d.Rows.Hidden And Not d.Columns.Hidden Then
        Count = Count + 1
    End If
Next

Application.ScreenUpdating = True
Range("C53").Value = Count


End Sub

如果行未被过滤掉(隐藏),Not d.Rows.Hidden 检查将返回 True

【讨论】:

  • +1 也可以检查隐藏列,以防万一...如果 d.Interior.Color = 15773696 而不是 d.Columns.Hidden 而不是 d.Rows.Hidden跨度>
  • 我可能会提到我测试了@Gaffi 提供的内容,并首先以编程方式将范围的内部颜色设置为 15773696,但实际上呈现为 16763904。因此,如果您测试内部颜色不同的机器,代码可能无法正确检测到硬编码的颜色。
  • @datatoo 这是另一个有效点。我不确定该颜色参考是什么,除了它是 OP 用作颜色值的。对于我自己的测试,我使用了我在写这个答案时设置和检查的另一种颜色......
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多