it-swarm.com.de

Excel-Funktion bestimmen, ob eine Zelle sichtbar ist

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

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

  1. Erstellen Sie eine Spalte mit allen 1 Werten.
  2. Verwenden Sie eine Formel wie subtotal(109,c2:c2)=1 (d. H. Nur in der zu überprüfenden Zelle), um festzustellen, ob sie sichtbar oder versteckt ist.

Gibt es eine Möglichkeit, dies zu tun, ohne dass eine temporäre Spalte sichtbar bleibt, 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 VISIBLE-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 dddd verbirgt, soll die Zeile mit eeee stattdessen den +BBB+-Stil haben.

12
Phrogz

Anstatt eine Zwischensumme mit einer Summe in einer anderen Spalte zu verwenden, können Sie mit counta eine Zwischensumme verwenden, um festzustellen, ob eine (als nicht leer bekannte) Zelle ausgeblendet ist oder nicht. Wenn zum Beispiel die Spalte A normalerweise 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 dann einfach Folgendes verwenden: = SUBTOTAL(103,$A2)=1, um festzustellen, ob die Zeile sichtbar ist.

12
Phrogz

Wenn Sie als Ergänzung zu Phrogz 'Antwort prüfen möchten, ob eine Zelle in einer - Spalte ausgeblendet ist, versuchen Sie Folgendes:

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.

5
Tom Bombadil

Dies ähnelt dem Ansatz von Garys 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 Sie dabei Hilfe benötigen. Jetzt können Sie mit MyRowHidden(cell) prüfen, ob die Zeile mit cell ausgeblendet ist.

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

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

in die Zelle H2 ziehen. Diese Formel ergibt TRUE wenn

  • die Kategorie in dieser Zeile (A2) unterscheidet sich von der Kategorie in der vorhergehenden Zeile (A1). d.h. dies ist die erste Zeile einer neuen Kategorie, oder
  • die vorherige Zeile sollte hervorgehoben werden, ist jedoch ausgeblendet.

Verwenden Sie dann einfach die bedingte Formatierung, um die Zelle A2 hervorzuheben, wenn =H2 wahr ist.

Beispiel: Rohdaten:

 full data set

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

 filtered data

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

1
G-Man

Dieser Thread ist ein bisschen alt, aber für den Fall, dass es jemandem hilft, gibt es hier eine Möglichkeit, Duplikate in einer gefilterten Tabelle bedingt zu formatieren, ohne VBA verwenden zu müssen.

  1. Machen 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 der zu überprüfenden Spalte eine normale doppelte bedingte Formatierung hinzu.

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, wenn nach Duplikaten gesucht wird, 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 auswählen). Daher kann es möglich sein, einen Zeilennullwert in Ihrer Liste zu erhalten, der als Duplikat markiert ist. Ansonsten habe ich viel Glück mit dieser Methode.

0
JFrizz

Ich würde vorschlagen, die folgende Formel zu verwenden (in einem Bereich von beispielsweise $ A: $ A):

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

Was macht das:

Wenn beides

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

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

Anmerkung: Wenn Sie die Funktion OFFSET verwenden, wird die bedingte Formatierung beim Einfügen einer zusätzlichen Zeile nicht unterbrochen.

0
Joma

Führen Sie das folgende Makro aus, um festzustellen, ob die Zeile über der aktiven Zelle ausgeblendet ist:

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
0
Gary's Student