La funzione Excel determina se una cella è visibile


12

Nella formattazione condizionale voglio rilevare se la riga sopra la cella corrente è nascosta o visibile. Come posso rilevare se una cella è visibile o no?

L'unico trucco che mi viene in mente è:

  1. Crea una colonna con tutti i 1valori.
  2. Usa una formula come subtotal(109,c2:c2)=1(cioè solo sulla cella che voglio controllare) per determinare se è visibile o nascosto.

C'è un modo per farlo senza una colonna temporanea che deve essere lasciata visibile quando viene mostrata la riga?


Per evitare un problema XY , quello che voglio fare è avere una colonna che è la categoria per la riga. La prima riga VISIBILE con una particolare categoria dovrebbe avere uno stile diverso; le righe successive con la stessa categoria sono leggermente diverse. In ASCII:

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

Se il mio filtro nasconde la riga con, ddddallora voglio che la riga eeeeabbia lo +BBB+stile.

Risposte:


13

Invece di un totale parziale usando una somma su un'altra colonna, puoi usare il totale parziale countaper vedere se una cella (nota non vuota) è nascosta o meno. Ad esempio, se la colonna Asarà normalmente visibile (a meno che la riga non sia nascosta)

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

Puoi inserire questa formula in una colonna che può essere nascosta e funzionerà comunque.

Nella formattazione condizionale, quindi, puoi semplicemente usare: = SUBTOTAL(103,$A2)=1per determinare se la riga è visibile.


5

Come aggiunta alla risposta di Phrogz, se devi verificare se una cella in una colonna è nascosta, prova una delle seguenti soluzioni,

Formattazione condizionale

=CELL("width",TargetCell)=0

Questo si aggiorna automaticamente non appena viene nascosta una colonna.

Verifica della formula

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

Questa formula non si aggiorna automaticamente e dovresti indirizzare Excel a "Calcola ora" selezionando l'opzione di menu o premendo "F9".


1

Questo è simile all'approccio di Gary's Student. Definire la seguente funzione VBA:

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

Vedi Come posso aggiungere VBA in MS Office? se hai bisogno di aiuto con quello. Ora puoi usare per verificare se la riga contenente è nascosta.MyRowHidden(cell)cell

Il modo in cui ho ideato per risolvere il problema utilizza una colonna di supporto, ma puoi nasconderlo. Supponendo che i dati inizino in Riga 2, con le categorie in Colonna A, immettere

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

nella cella H2e trascinare verso il basso. Questa formula restituisce VERO se

  • la categoria in questa riga ( A2) è diversa dalla categoria nella riga precedente ( A1); cioè, questa è la prima riga di una nuova categoria, oppure
  • la riga precedente deve essere evidenziata, ma è nascosta.

Quindi usa semplicemente la formattazione condizionale per evidenziare la cella A2se =H2è vera.

Esempio: dati grezzi:

        set completo di dati

Sì, sono un tradizionalista; Conto ancora Plutone come un pianeta. Eccolo di nuovo con le righe numerate per prime (2, 3, 5, 7, 11 e 13) nascoste:

        dati filtrati

Ovviamente dovrai abilitare le macro nella cartella di lavoro.


0

Per rilevare se la riga sopra la cella attiva è nascosta , eseguire questa macro:

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
Come lo farebbero dalla formattazione condizionale (posta nella domanda)?
CharlieRB

0

Questo thread è un po 'vecchio, ma nel caso sia utile a chiunque, ecco un modo per formattare in modo condizionale i duplicati su una tabella filtrata senza dover usare VBA.

  1. Crea una colonna popolata con 1
  2. Crea un'altra colonna e inserisci una formula come questa

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

  3. Inserisci la normale formattazione condizionale duplicata sulla colonna che desideri controllare.

La formula dal passaggio 2 copierà il valore dalla colonna che si desidera controllare, ma solo quando la riga è visibile. In questo modo, quando vengono verificati i duplicati, si ottengono solo quelli applicabili alla tabella filtrata. Penso che questo potrebbe non funzionare per gli zeri (o "" o qualunque cosa tu scelga come valore "else" nella tua dichiarazione if). Quindi potrebbe essere possibile ottenere un valore di linea zero nell'elenco che viene evidenziato come duplicato. Diverso da quello che sto avendo fortuna con questo metodo.


0

Proporrei di usare la seguente formula (su un intervallo, ad esempio $ A: $ A):

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

Cosa fa:

Se entrambi

  1. la cella è uguale a quella sopra: A1=OFFSET(A1;-1;0)
  2. la cella sopra è visibile: SUBTOTAL(103;OFFSET(A1;-1;0))=1

allora il risultato è True, quindi la cella è un duplicato di una cella visibile proprio sopra e dovrebbe essere ad esempio disattivata.

Sidenote: l'uso della OFFSETfunzione fa sì che la formattazione condizionale non si interrompa quando viene inserita una riga aggiuntiva.


-1

Ecco la soluzione che ho appena usato:

Ho creato una nuova colonna C (e HID l'originale (colonna B)). Nella nuova colonna ho usato la formula = SUBTOTALE (9, B2). CHE SOMMA la riga ONE che ti interessa. Ho quindi copiato tutte le righe!

Ora, quando filtri utilizzando il filtro avanzato. I valori sono tutti ZERO in questa colonna a meno che non siano visibili (non filtrati).

Quindi, il normale = SUMIF () funziona come un campione. Basta non usare accidentalmente la colonna nascosta per sommare. Somma attraverso la colonna SUBTOTAL () appena creata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.