Qu'est-ce qui devrait être fait automatiquement? La solution ultime est une macro, mais si vous avez déjà les listes et que vous avez besoin de mettre seulement Xs, vous pouvez le résoudre aussi avec des formules.
Máté Juhász
La feuille de calcul "data" va être variable, j'y ajouterai des données au fur et à mesure que je les obtiens ... mais j'aimerais générer automatiquement la matrice à partir des données afin de ne pas avoir à la construire. Je ne sais pas comment écrire une macro et je serais très reconnaissant de l'aide.
Susan McCoy
Réponses:
1
C'est facile à faire avec des formules. Pour plus de simplicité, j'ai placé la matrice dans les colonnes C- N(et au-delà) de la feuille de calcul principale; le déplacer sur une autre feuille (page / onglet) est trivial.
C'est un travail pour la SEARCHfonction, qui cherche une chaîne dans une autre, comme "anti" dans "frantic". Nous allons l'utiliser pour rechercher chaque propriété individuelle («analgésique», «antibactérien», etc.) dans la liste des propriétés («antiseptique, antifongique, analgésique, antitumoral, etc.»).
SEARCHrenvoie la position de la sous-chaîne - par exemple, SEARCH("anti", "frantic")renvoie 3, car «a» est le troisième caractère de «frantic». On s'en fiche nous nous soucions du fait que, si la première chaîne est présente dans la seconde, SEARCHretourne un nombre, sinon elle retourne une erreur. Donc, si nous mettons ISERROR(SEARCH(C$1, $B2))dans la cellule C2, il retourne FALSE si «antiseptique» ( C1) est dans la liste des propriétés pour Lavender ( B2) et TRUE sinon. Alors
=IF(ISERROR(SEARCH(C$1, $B2)), "", "x")
s'affiche xsi la propriété est sur la liste et vide si ce n'est pas le cas.
Mais c'est une simplification excessive. Si une liste de propriétés inclut «antibactérien (puissant)», la recherche sur «antibactérien» aboutira. Votre illustration de la matrice souhaitée suggère que vous ne voulez pas que cela se produise. Il existe une astuce standard pour cela: recherchez «, antibactérien» (avec des virgules au début et à la fin), pour trouver «antibactérien» en tant qu'entrée complète dans la liste. Mais cela ne correspondra pas si «antibactérien» est la première ou la dernière entrée de la liste - nous ajoutons donc des virgules au début et à la fin de la liste.
Alors, mettez =IF(ISERROR(SEARCH(", "&C$1&",", ", "&$B2&",")), "", "x")
dans la cellule C2, et faites glisser vers le bas et à droite:
Vous devez toujours créer les en-têtes pour chaque propriété médicale, maintenez-les cohérents. Néanmoins, je l’aime bien comme une solution purement Excel, plutôt que d’utiliser un outil (CLI) pour analyser un fichier CSV en en créant un autre, comme j’avais été tenté de le suggérer à l’origine.
X
s, vous pouvez le résoudre aussi avec des formules.Réponses:
C'est facile à faire avec des formules. Pour plus de simplicité, j'ai placé la matrice dans les colonnes
C
-N
(et au-delà) de la feuille de calcul principale; le déplacer sur une autre feuille (page / onglet) est trivial.C'est un travail pour la
SEARCH
fonction, qui cherche une chaîne dans une autre, comme "anti" dans "frantic". Nous allons l'utiliser pour rechercher chaque propriété individuelle («analgésique», «antibactérien», etc.) dans la liste des propriétés («antiseptique, antifongique, analgésique, antitumoral, etc.»).SEARCH
renvoie la position de la sous-chaîne - par exemple,SEARCH("anti", "frantic")
renvoie 3, car «a» est le troisième caractère de «frantic». On s'en fiche nous nous soucions du fait que, si la première chaîne est présente dans la seconde,SEARCH
retourne un nombre, sinon elle retourne une erreur. Donc, si nous mettonsISERROR(SEARCH(C$1, $B2))
dans la celluleC2
, il retourne FALSE si «antiseptique» (C1
) est dans la liste des propriétés pour Lavender (B2
) et TRUE sinon. Alorss'affiche
x
si la propriété est sur la liste et vide si ce n'est pas le cas.Mais c'est une simplification excessive. Si une liste de propriétés inclut «antibactérien (puissant)», la recherche sur «antibactérien» aboutira. Votre illustration de la matrice souhaitée suggère que vous ne voulez pas que cela se produise. Il existe une astuce standard pour cela: recherchez «, antibactérien» (avec des virgules au début et à la fin), pour trouver «antibactérien» en tant qu'entrée complète dans la liste. Mais cela ne correspondra pas si «antibactérien» est la première ou la dernière entrée de la liste - nous ajoutons donc des virgules au début et à la fin de la liste.
Alors, mettez
=IF(ISERROR(SEARCH(", "&C$1&",", ", "&$B2&",")), "", "x")
dans la celluleC2
, et faites glisser vers le bas et à droite:la source