Je commencerais par optimiser votre O
, P
y Q
formules. Vous avez actuellement
=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")
IFERROR
est une fonction très utile pour afficher une version aseptisée. d'une valeur calculée qui pourrait être un code d'erreur ; Je l'utilise fréquemment et la recommande dans les réponses sur Super User. Comme vous le savez probablement,
IFERROR(_calculated_value_, _default_value_)
est l'abréviation de
IF(ISERROR(_calculated_value_), _default_value_, _calculated_value_)
Mais l'utilisation de IFERROR
pour créer une version assainie d'une valeur puis tester cette valeur pour faire quelque chose de conditionnel est une façon inutilement maladroite d'utiliser la fonction IFERROR
. La formule ci-dessus peut être simplifiée comme suit
=IF(ISERROR(SEARCH("Brand is not valid", M42)), "", "Brand")
Et, comme vous le savez certainement, SEARCH("Brand is not valid", M42)
des tests pour vérifier si M42
contient Brand is not valid
. Mais, tant que la colonne M
ne peut contenir que vos trois chaînes d'erreur, ce qui peut être abrégé en
=IF(ISERROR(SEARCH("Brand", M42)), "", "Brand")
ou simplifié à
=IF(M42 = "Brand is not valid", "Brand", "")
OK, maintenant je vais faire le O
, P
y Q
un peu plus compliquées :
O42
=IF($A42=$A41, O41, "") & IF(ISERROR(SEARCH("Brand", $M42)), "", "Brand")
P42
=IF($A42=$A41, P41, "") & IF(ISERROR(SEARCH("Product", $M42)), "", "Product")
Q42
=IF($A42=$A41, Q41, "") & IF(ISERROR(SEARCH("OEM", $M42)), "", "OEM")
La formule pour O42
dit,
S'il s'agit de la deuxième ou de la troisième ligne pour cet identifiant (colonne A
) regardez la cellule au-dessus de celle-ci (c'est-à-dire la colonne O
pour la cellule précédente si nous avons déjà établi que cette chose a une marque invalide. En outre, regardez la colonne M
pour cette ligne afin de voir si elle est Brand is not valid
. Puis concaténer les résultats.
Étant donné qu'un identifiant unique ne sera jamais répertorié deux fois avec la même erreur (n'est-ce pas ?), ces deux sous-résultats ne seront jamais tous les deux non vides, il s'agit donc essentiellement d'un "OU" :
Afficher une valeur de Brand
i OU l'une des lignes précédentes pour cet identifiant, contient l'erreur de marque non valide.
Cela a pour effet de faire glisser le O
, P
y Q
valeurs jusqu'à la dernière ligne pour chaque ID :
Notez que les lignes 41, 44, 47 et 49 présentent chacune les formes abrégées de toutes les erreurs qui s'appliquent à leurs identifiants respectifs dans les colonnes O
, P
y Q
.
J'ai défini la colonne R
de la même manière que vous. Voir Générer une liste du contenu des cellules séparées par des virgules, à l'exclusion des blancs. pour connaître les techniques permettant d'éliminer les barres obliques indésirables.
Si la concaténation souhaitée n'existe que dans les lignes 41, 44, 47 et 49 est suffisant, vous avez terminé. Sinon, définissez N42
como
=IF($A22=$A23, N23, R22)
o
=IF($A22<>$A23, R22, N23)
Il s'agit presque exactement de la même astuce que celle que j'ai utilisée dans Colonnes O
, P
y Q
, mais en allant dans la direction opposée :
S'il s'agit de la dernière ligne pour cet ID (c'est-à-dire s'il s'agit de la ligne 41, 44, 47 ou 49), utiliser la concaténation des valeurs de cette ligne (c'est-à-dire la collection complète des codes d'erreur pour cet ID). [ ] Sinon, regardez la cellule en dessous de celle-ci (c'est-à-dire la colonne N
pour la ligne suivante), qui contiendra la bonne réponse.
En d'autres termes, les valeurs souhaitées remontent jusqu'à la première ligne de chaque identifiant.