La fonction Excel détermine si une cellule est visible

En format conditionnel, je souhaite détecter si la ligne située au-dessus de la cellule actuelle est cachée ou visible. Comment détecter si une cellule est visible ou non?

Le seul hack que je peux penser est:

  1. Créez une colonne avec les 1 valeurs.
  2. Utilisez une formule comme subtotal(109,c2:c2)=1 (c'est-à-dire juste sur la cellule que je veux vérifier) ​​pour déterminer si elle est visible ou cachée.

Existe-t-il une façon de le faire sans colonne temporaire qui doit être visible lorsque la ligne est affichée?


Pour éviter un problème XY , ce que je veux faire, c'est une colonne qui est la catégorie de la ligne. La première ligne VISIBLE avec une catégorie particulière devrait avoir un style différent; Les rangées ultérieures avec la même catégorie sont légèrement différentes. En ASCII:

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

Si mon filtre cache la ligne avec dddd je veux que la ligne avec eeee ait le style +BBB+ place.

Au lieu de sous-total en utilisant une somme sur une autre colonne, vous pouvez utiliser le sous-total en utilisant counta pour voir si une cellule (non connue) est cachée ou non. Par exemple, si la colonne A sera normalement visible (à moins que la ligne ne soit cachée)

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

Vous pouvez placer cette formule dans une colonne cachée, et elle fonctionnera toujours.

Dans le formatage conditionnel, vous pouvez simplement utiliser: = SUBTOTAL(103,$A2)=1 pour déterminer si la ligne est visible.

En tant qu'additif à la réponse de Phrogz, si vous devez vérifier si une cellule dans une colonne est cachée, essayez l'une des options suivantes,

Mise en forme conditionnelle

 =CELL("width",TargetCell)=0 

Cela se met automatiquement à jour dès qu'une colonne est masquée.

Vérification de Formule

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

Cette formule ne sera pas mise à jour automatiquement et vous devriez diriger Excel vers "Calculer maintenant" en choisissant l'option de menu ou en appuyant sur "F9".

Ceci est similaire à l'approche de Gary's Student. Définissez la fonction VBA suivante:

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

Voir Comment puis-je ajouter VBA dans MS Office? Si vous avez besoin d'aide pour cela. Maintenant, vous pouvez utiliser MyRowHidden( cell ) pour vérifier si la cell contenant cell est masquée.

La façon dont j'ai conçu pour résoudre le problème utilise une colonne d'aide, mais vous pouvez la cacher. En supposant que vos données commencent dans la ligne 2 , avec les catégories de la colonne A , entrez

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

Dans la cellule H2 , et faites glisser vers le bas. Cette formule évalue à TRUE si

  • La catégorie dans cette rangée ( A2 ) est différente de la catégorie de la rangée précédente ( A1 ); C'est-à-dire, c'est la première rangée d'une nouvelle catégorie, ou
  • La ligne précédente doit être mise en surbrillance, mais est cachée.

Ensuite, utilisez simplement le formatage conditionnel pour mettre en évidence la cellule A2 si =H2 est vrai.

Exemple: données brutes:

Ensemble de données complet

Ouais, je suis un traditionaliste; Je compte toujours Pluton comme une planète. Ici, il est de nouveau avec les premières lignes numérotées (2, 3, 5, 7, 11 et 13) cachées:

Données filtrées

Bien sûr, vous devrez activer les macros dans votre classeur.

Pour détecter si la ligne au-dessus de la cellule active est cachée , exécutez cette 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 

Voici la solution que je viens d'utiliser:

J'ai créé une nouvelle colonne C (et HID l'original (colonne B)). Dans la nouvelle colonne, j'ai utilisé la formule = SUBTOTAL (9, B2), qui SOMMES la ligne ONE qui vous intéresse. J'ai ensuite copié toutes les lignes!

Maintenant, lorsque vous filtrez avec un filtre avancé. Les valeurs sont toutes ZERO dans cette colonne, sauf si elles sont visibles (non filtrées).

Ensuite, la normale = SUMIF () fonctionne comme un champ. N'utilisez pas accidentellement la colonne cachée pour résumer. Survolez la colonne SUBTOTAL () que vous venez de créer.