在条件格式中,我想检测当前单元格上方的行是隐藏还是可见。如何检测单元格是否可见?
我能想到的唯一办法是:
- 创建一个包含所有
1
值的列。 - 使用类似的公式
subtotal(109,c2:c2)=1
(即仅在我想要检查的单元格上)来确定它是可见的还是隐藏的。
有没有办法做到这一点,而不需要显示行时必须保持临时列可见?
为了避免XY问题,我想要做的是有一列作为该行的类别。具有特定类别的第一个可见行应该具有不同的样式;具有相同类别的后续行略有不同。在 ASCII 中:
cat. item
+AAA+ aaaa
(AAA) bbbb
(AAA) cccc
+BBB+ dddd
(BBB) eeee
(BBB) ffff
如果我的过滤器隐藏了行,dddd
那么我希望行eeee
具有+BBB+
样式。
答案1
counta
您可以使用 subtotal来查看(已知非空白)单元格是否隐藏,而不是使用另一列上的总数进行 subtotal 。例如,如果列A
通常是可见的(除非行被隐藏)
= IF( SUBTOTAL(103,A2)=1, "VISIBLE", "HIDDEN (or blank)" )
您可以将此公式放在可能隐藏的列中,它仍然有效。
在条件格式中,您只需使用:= SUBTOTAL(103,$A2)=1
来确定该行是否可见。
答案2
作为 Phrogz 答案的补充,如果您需要检查柱子处于隐藏状态,请尝试以下任一操作,
条件格式
=CELL("width",TargetCell)=0
一旦列被隐藏,它就会自动更新。
配方检查
=IF(CELL("width",TargetCell)=0, "Cell is hidden.", "Cell is visible.")
此公式不会自动更新,您必须通过选择菜单选项或按“F9”将 Excel 引导至“立即计算”。
答案3
这与 Gary 学生的方法类似。定义以下 VBA 函数:
Function MyRowHidden(ref As Range)
MyRowHidden = Rows(ref.Row).Hidden
End Function
看如何在 MS Office 中添加 VBA?
如果你需要帮助。现在你可以使用它 来检查包含MyRowHidden(cell)
cell
被隐藏。
我设计的解决问题的方法是使用辅助列,但您可以隐藏它。假设您的数据从 Row 开始2
,类别在 Column 中A
,请输入
=OR($A1<>$A2, AND(H1,MyRowHidden(H1)))
到单元格H2
,然后向下拖动。如果
- 此行中的类别 (
A2
) 与前一行中的类别不同 (A1
);即,这是新类别的第一行,或者 - 前一行应该突出显示,但却被隐藏了。
然后只需使用条件格式来突出显示单元格A2
(如果=H2
为真)。
例如:原始数据:
是的,我是一个传统主义者;我仍然将冥王星视为行星。这里再次隐藏了素数行(2、3、5、7、11 和 13):
当然,您必须在工作簿中启用宏。
答案4
这个线程有点旧了,但万一对任何人都有帮助,这里有一种无需使用 VBA 即可在过滤表上有条件地格式化重复项的方法。
创建一个由 1 填充的列
创建另一列并在其中输入如下公式
=IF(SUBTOTAL(103, [@ColumnWithOnlyOnesInIt])=1, [@ColumnYouWantToCheckForDuplicates], "")
在您想要检查的列上输入正常的重复条件格式。
步骤 2 中的公式将从您要检查的列中复制值,但仅当行可见时才会复制。这样,在检查重复项时,您只会获得适用于已筛选表的值。我认为这可能不适用于零(或“”或您在 if 语句中选择作为“else”值的任何值)。因此,可能可以在列表中获得突出显示为重复项的行零值。除此之外,我对这种方法很满意。