我正在尝试对其他组的可见细胞进行着色。
我的数据的每一行都包含关于给定订单的信息,每个订单可能有多行,例如,订单1可能有3行,而订单2可能有1行,等等。数据按订单号排序,因此给定订单的所有行都是连续的。
我已经将每组与包含以下公式的辅助列(AS)进行了着色:=IF(ROW()=2,TRUE,IF(A2=A1,AS1,NOT(AS1)))
这导致每隔一个Order组为TRUE或False。然后我使用条件格式对每个";TRUE";一行
这一直有效,直到我开始过滤我的数据,然后我可以得到两个相邻的着色或非着色组。
我想我要找的是一个VBA函数,它将把一个单元格与以前的VISIBLE单元格进行比较,如果匹配与否,它将返回TRUE或FALSE。
任何帮助都将不胜感激。
您可以使用此代码对每隔一行进行着色
Sub ShadeThem()
Dim okShade As Boolean
Dim r As Range
For Each r In Range("A1", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible)
If okShade Then
r.EntireRow.Interior.Color = vbRed
okShade = False
Else
okShade = True
End If
Next
End Sub
我假设您过滤的数据会影响从第1行向下的列A他们没有,只是更改了"A1"
和Cells(Rows.Count, "A")
以影响所需的列
为了让它在每次新的过滤中运行,你可以:
添加一个辅助单元格,用于统计可见行数=小计(103;A1:A1000)这将在每个过滤处触发
Worksheet_Calculate
事件在相关工作表代码窗格中添加
Worksheet_Calculate
事件处理程序Private Sub Worksheet_Calculate() ShadeThem End Sub
正如我在评论中所说,几乎可以肯定,有一种更好的方法可以用你的电子表格(一个表格!)来完成你正在尝试的工作。但是,如果你真的想用VBA自定义公式来测试单元格是否隐藏,你可以使用这个。。。
Function isHiddenRow(aRange As Range) As Boolean
isHiddenRow = aRange.EntireRow.Hidden
End Function
这个公式假设了一些可能性:
- 只有一个单元格
- 筛选重新计算的影响