Excel函数确定单元格是否可见


12

在条件格式中,我要检测当前单元格上方的行是隐藏还是可见。如何检测细胞是否可见?

我唯一能想到的技巧是:

  1. 创建具有所有1值的列。
  2. 使用类似的公式subtotal(109,c2:c2)=1(即仅在我要检查的单元格上)来确定它是可见的还是隐藏的。

有没有一种方法可以在没有显示临时行的情况下使该行保持可见状态?


为避免XY问题,我想做的是创建一列作为该行的类别。具有特定类别的第一VISIBLE行应具有不同的样式;以后具有相同类别的行略有不同。在ASCII中:

cat.   item
+AAA+  aaaa
(AAA)  bbbb
(AAA)  cccc
+BBB+  dddd
(BBB)  eeee
(BBB)  ffff

如果我的过滤器隐藏了一行dddd话,我想与该行eeee+BBB+造型来代替。

Answers:


13

您可以使用小计使用counta来查看(已知-非空白)单元格是否被隐藏,而不是使用另一列的总和来进行小计。例如,如果列A通常是可见的(除非行被隐藏)

= IF( SUBTOTAL(103,A2)=1, "VISIBLE", "HIDDEN (or blank)" )

您可以将该公式放在可能隐藏的列中,并且仍然可以使用。

然后,在条件格式中,您可以使用:= SUBTOTAL(103,$A2)=1确定该行是否可见。


5

作为Phrogz答案的附录,如果您需要检查列中的单元格是否被隐藏,请尝试以下任一方法,

条件格式

=CELL("width",TargetCell)=0

列被隐藏后,此操作会自动更新。

配方检查

=IF(CELL("width",TargetCell)=0, "Cell is hidden.", "Cell is visible.")

该公式不会自动更新,您必须通过选择菜单选项或按“ F9”将Excel定向为“立即计算”。


1

这类似于加里(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,然后向下拖动。如果以下公式,则此公式的计算结果为TRUE

  • 此行(A2)中的类别与上一行(A1)中的类别不同;即,这是新类别的第一行,或者
  • 前一行应突出显示,但已隐藏。

然后,A2如果条件=H2为真,则只需使用条件格式来突出显示单元格。

示例:原始数据:

        完整的数据集

是的,我是传统主义者;我仍然认为冥王星是一颗行星。这里还是隐藏有素数行(2、3、5、7、11和13):

        过滤数据

当然,您必须在工作簿中启用宏。


0

要检测活动单元上方的行是否为Hidden,请运行以下宏:

Sub WhatsAboveMe()
Dim r As Range
Set r = Selection
With r
    If .Row = 1 Then
        Exit Sub
    End If
    If .Offset(-1, 0).EntireRow.Hidden = True Then
        MsgBox "the row above is hidden"
    Else
        MsgBox "the row above is visible"
    End If
End With
End Sub

1
他们将如何从条件格式(问题中提出的问题)中运行它?
CharlieRB

0

该线程有点旧,但是如果对任何人都有用,这是一种有条件地格式化过滤表上重复项的方法,而不必使用VBA。

  1. 将一栏填入1
  2. 在另一列中添加一个这样的公式

    =IF(SUBTOTAL(103, [@ColumnWithOnlyOnesInIt])=1, [@ColumnYouWantToCheckForDuplicates], "")

  3. 在要检查的列上放入普通的重复条件格式。

步骤2中的公式将复制要检查的列中的值,但仅当该行可见时。这样,在检查重复项时,您只会得到适用于过滤表的内容。我认为这可能不适用于零(或“”或您在if语句中选择为“ else”值的任何内容)。因此,可能会在列表中获得突出显示为重复项的行零值。除此之外,我还很幸运。


0

我建议使用以下公式(在$ A:$ A等范围内):

=AND(A1=OFFSET(A1;-1;0);SUBTOTAL(103;OFFSET(A1;-1;0))=1)

那是什么:

如果两者

  1. 该单元格等于上面的单元格: A1=OFFSET(A1;-1;0)
  2. 上面的单元格可见: SUBTOTAL(103;OFFSET(A1;-1;0))=1

则结果为True,因此该单元格是右上方可见单元格的副本,应将其灰显。

旁注:使用此OFFSET函数可使插入另一行时条件格式不会中断。


-1

这是我刚刚使用的解决方案:

我创建了一个新的列C(并为原始列创建了HID(列B))。在新列中,我使用了= SUBTOTAL(9,B2)公式,该公式求和了您感兴趣的第一行。然后,我将其复制了所有行!

现在,当您使用高级过滤器进行过滤时。除非可见(未过滤),否则此列中的所有值均为零。

然后,普通= SUMIF()就像冠军。只是不要意外地使用隐藏列进行求和。在刚创建的SUBTOTAL()列中求和。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.