Die Excel-Funktion bestimmt, ob eine Zelle sichtbar ist

12

Bei der bedingten Formatierung möchte ich feststellen, ob die Zeile über der aktuellen Zelle ausgeblendet oder sichtbar ist. Wie kann ich feststellen, ob eine Zelle sichtbar ist oder nicht?

Der einzige Hack, an den ich denken kann, ist:

  1. Erstellen Sie eine Spalte mit allen 1Werten.
  2. Verwenden Sie eine Formel wie subtotal(109,c2:c2)=1(dh nur für die Zelle, die ich überprüfen möchte), um festzustellen, ob sie sichtbar oder ausgeblendet ist.

Gibt es eine Möglichkeit, dies ohne eine temporäre Spalte zu tun, die sichtbar bleiben muss, wenn die Zeile angezeigt wird?


Um ein XY-Problem zu vermeiden , möchte ich eine Spalte haben, die die Kategorie für die Zeile ist. Die erste SICHTBARE Zeile mit einer bestimmten Kategorie sollte einen anderen Stil haben. spätere Zeilen mit derselben Kategorie unterscheiden sich geringfügig. In ASCII:

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

Wenn mein Filter die Zeile mit verbirgt, ddddmöchte ich, dass die Zeile mit stattdessen eeeedas +BBB+Styling hat.

Phrogz
quelle

Antworten:

13

Anstatt eine Zwischensumme mit einer Summe in einer anderen Spalte zu verwenden, können Sie die Zwischensumme verwenden counta, um festzustellen , ob eine (bekannte, nicht leere) Zelle ausgeblendet ist oder nicht. Zum Beispiel, wenn die Spalte Anormalerweise sichtbar ist (es sei denn, die Zeile ist ausgeblendet)

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

Sie können diese Formel in eine Spalte einfügen, die möglicherweise ausgeblendet ist, und sie funktioniert weiterhin.

Bei der bedingten Formatierung können Sie also einfach Folgendes verwenden, = SUBTOTAL(103,$A2)=1um festzustellen, ob die Zeile sichtbar ist.

Phrogz
quelle
5

Wenn Sie als Ergänzung zu Phrogz 'Antwort überprüfen müssen, ob eine Zelle in einer Spalte ausgeblendet ist, versuchen Sie eine der folgenden Möglichkeiten :

Bedingte Formatierung

=CELL("width",TargetCell)=0

Dies wird automatisch aktualisiert, sobald eine Spalte ausgeblendet wird.

Formelprüfung

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

Diese Formel wird nicht automatisch aktualisiert und Sie müssten Excel zu "Jetzt berechnen" weiterleiten, indem Sie die Menüoption auswählen oder "F9" drücken.

Tom Bombadil
quelle
1

Dies ähnelt dem Ansatz von Gary's Student. Definieren Sie die folgende VBA-Funktion:

Function MyRowHidden(ref As Range)
    MyRowHidden = Rows(ref.Row).Hidden
End Function

Siehe Wie füge ich VBA in MS Office hinzu? wenn du dabei Hilfe brauchst. Jetzt können Sie überprüfen, ob die enthaltene Zeile ausgeblendet ist.MyRowHidden(cell)cell

Die Art und Weise, wie ich das Problem gelöst habe, verwendet eine Hilfsspalte, die Sie jedoch ausblenden können. Angenommen, Ihre Daten beginnen in Zeile 2mit den Kategorien in Spalte A, geben Sie ein

=OR($A1<>$A2, AND(H1,MyRowHidden(H1)))

in die Zelle H2und ziehen Sie nach unten. Diese Formel ergibt TRUE wenn

  • Die Kategorie in dieser Zeile ( A2) unterscheidet sich von der Kategorie in der vorhergehenden Zeile ( A1). Dies ist die erste Zeile einer neuen Kategorie oder
  • Die vorherige Zeile sollte hervorgehoben sein, ist jedoch ausgeblendet.

Verwenden Sie dann einfach die bedingte Formatierung, um die Zelle hervorzuheben, A2wenn dies der =H2Fall ist.

Beispiel: Rohdaten:

        vollständiger Datensatz

Ja, ich bin ein Traditionalist; Ich zähle Pluto immer noch als Planeten. Hier ist es wieder mit den primzahlierten Zeilen (2, 3, 5, 7, 11 und 13) versteckt:

        gefilterte Daten

Natürlich müssen Sie Makros in Ihrer Arbeitsmappe aktivieren.

G-Man sagt "Reinstate Monica"
quelle
0

Um festzustellen , ob die Zeile oberhalb der aktiven Zelle wird Versteckt , führen Sie dieses Makro:

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
Garys Schüler
quelle
1
Wie würden sie das von der bedingten Formatierung ausführen (in der Frage gestellt)?
CharlieRB
0

Dieser Thread ist etwas alt, aber falls er für jemanden hilfreich ist, finden Sie hier eine Möglichkeit, Duplikate in einer gefilterten Tabelle bedingt zu formatieren, ohne VBA verwenden zu müssen.

  1. Erstellen Sie eine Spalte mit Einsen
  2. Machen Sie eine weitere Spalte und fügen Sie eine Formel wie diese ein

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

  3. Fügen Sie für die zu überprüfende Spalte eine normale doppelte bedingte Formatierung ein.

Die Formel aus Schritt 2 kopiert den Wert aus der Spalte, die Sie überprüfen möchten, jedoch nur, wenn die Zeile sichtbar ist. Auf diese Weise erhalten Sie beim Überprüfen auf Duplikate nur diejenigen, die für die gefilterte Tabelle gelten. Ich denke, dies funktioniert möglicherweise nicht für Nullen (oder "" oder was auch immer Sie als "else" -Wert in Ihrer if-Anweisung wählen). Daher ist es möglicherweise möglich, einen Zeilennullwert in Ihrer Liste zu erhalten, der als Duplikat hervorgehoben ist. Ansonsten habe ich viel Glück mit dieser Methode.

JFrizz
quelle
0

Ich würde vorschlagen, die folgende Formel zu verwenden (in einem Bereich, z. B. $ A: $ A):

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

Was das macht:

Wenn beides

  1. Die Zelle ist gleich der oben genannten: A1=OFFSET(A1;-1;0)
  2. Die Zelle oben ist sichtbar: SUBTOTAL(103;OFFSET(A1;-1;0))=1

dann ist das Ergebnis True, daher ist die Zelle ein Duplikat einer sichtbaren Zelle direkt darüber und sollte z. B. ausgegraut sein.

Nebenbemerkung: Wenn Sie die OFFSETFunktion verwenden, wird die bedingte Formatierung nicht unterbrochen , wenn eine zusätzliche Zeile eingefügt wird.

Joma
quelle
-1

Hier ist die Lösung, die ich gerade verwendet habe:

Ich habe eine neue Spalte C erstellt (und das Original versteckt (Spalte B)). In der neuen Spalte habe ich die Formel = SUBTOTAL (9, B2) verwendet, die die EINE Zeile summiert, an der Sie interessiert sind. Ich habe dann alle Zeilen kopiert!

Wenn Sie jetzt mit dem erweiterten Filter filtern. Die Werte in dieser Spalte sind alle NULL, sofern sie nicht sichtbar (nicht gefiltert) sind.

Dann funktioniert normal = SUMIF () wie ein Champion. Verwenden Sie die versteckte Spalte nur nicht versehentlich, um eine Summe zu erstellen. Summe über die soeben erstellte Spalte SUBTOTAL ().

Captain Kirk
quelle