Pour autant que je sache, il n'y a pas de fonctionnalités intégrées qui peuvent analyser et résumer les balises séparées par des virgules dans Excel. Vous pouvez bien sûr créer votre propre solution avec des fonctions de feuille de calcul et un peu de VBA. Voici une solution rapide pour ce faire.
Étape 1 : appuyez sur Alt+ F11pour ouvrir le volet de l'éditeur VBA dans Excel. Insérez un nouveau module et collez-le dans ce code pour une fonction personnalisée.
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
Cette fonction vous permettra de créer des listes séparées par des virgules pour résumer les données de balise dont vous disposez.
Étape 2 : Dans une feuille de calcul, entrez dans une cellule (H2 dans l'exemple ci-dessous) la balise que vous souhaitez rechercher. Dans la cellule de droite, entrez la formule suivante en appuyant sur Ctrl+ Shift+ Enter.
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
En appuyant sur Ctrl+ Shift+ Enter, vous entrez la formule sous forme de formule matricielle. Il apparaîtra entouré par {...}
dans la barre de formule. Notez que dans la formule se $B$2:$B$6
trouve la plage contenant toutes les balises des éléments répertoriés dans $A$2:$A$6
.
EDIT:
Si cela ne vous dérange pas que vos correspondances soient répertoriées dans une colonne plutôt que dans une liste dans une cellule, vous pouvez renvoyer des correspondances pour les balises en utilisant uniquement les fonctions de feuille de calcul.
Où vos titres sont Column A
, les balises sont Column B
, et l'étiquette que vous recherchez est dans H2
, vous pouvez utiliser la suivante formule de tableau dans I2
et remplir aussi loin que vous avez besoin:
=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
La formule fonctionne en formant d'abord un tableau de nombres selon que les balises de chaque ligne contiennent le terme de recherche. Si une correspondance est trouvée, le numéro de ligne est stocké dans le tableau. S'il n'est pas trouvé, 2000000 est stocké dans le tableau. Ensuite, la SMALL(<array>,ROW()-1)
partie de la formule renvoie la ROW()-1
valeur la plus petite du tableau. Ensuite, cette valeur est passée comme argument d'index à la INDEX()
fonction, où la valeur à cet index dans le tableau de titres est retournée. Si un nombre supérieur au nombre de lignes du tableau de titres est passé INDEX()
en argument, une erreur est renvoyée. Étant donné que 2000000 est passé comme argument lorsqu'aucune correspondance n'est trouvée, une erreur est renvoyée. La IFERROR()
fonction retourne alors ""
dans ce cas.
Il est important de comprendre comment ROW()
est utilisé dans cette formule. Si vous souhaitez afficher votre liste de résultats commençant dans une ligne différente, vous devrez ajuster le deuxième argument de la SMALL()
fonction afin qu'il renvoie la première plus petite valeur du tableau. Par exemple, si votre liste de résultats commence dans la ligne 1 au lieu de la ligne 2, vous utiliseriez à la SMALL(...,ROW())
place de SMALL(...,ROW()-1)
.
De plus, si votre liste de titres et de balises ne commence pas dans la ligne 1, vous devrez également ajuster la formule. Le deuxième argument de la IF()
fonction doit être ajusté pour qu'une correspondance dans la première ligne de vos données renvoie 1. Par exemple, si votre liste de titres commence dans la ligne 2 au lieu de la ligne 1, vous aurez besoin de la formule à inclure à la IF(...,ROW($A$2:$A$7)-1,...)
place de IF(...,ROW($A$1:$A$6),...)
.