J'essaie de configurer une fonction pour reformater une chaîne qui sera ensuite concaténée. Un exemple de chaîne ressemblerait à ceci:
Standard_H2_W1_Launch_123x456_S_40K_AB
Même si parfois le "S" n'existe pas, et parfois le "40K" correspond à "60K" ou pas, et le "_AB" peut également être "_CD" ou _ "EF". Enfin, tous les traits de soulignement doivent être changés en traits d'union. Le produit final devrait ressembler à ceci:
Standard-H2-W1-Launch-123x456-
J'ai quatre fonctions qui, si elles sont exécutées l'une après l'autre, prennent en charge tout cela:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")
=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")
=SUBSTITUTE(C2,"_S_","_")
=SUBSTITUTE(D2,"_","-")
J'ai essayé plusieurs façons de les combiner en une seule fonction, mais je suis relativement novice à ce niveau d'Excel et je suis donc perdue. Est-il possible de combiner tout cela pour qu'il exécute une commande après l'autre dans une cellule?
Pour les combiner simplement, vous pouvez les regrouper comme suit:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-")
(Notez que cela peut dépasser l'ancienne limite Excel de 7 instructions imbriquées. Je teste dans Excel 2010
Une autre façon de le faire consiste à utiliser les fonctions Left
et Right
.
Cela suppose que les données changeantes à la fin sont toujours présentes et comportent 8 caractères.
=SUBSTITUTE(LEFT(A2,LEN(A2)-8),"_","-")
Cela permettra d'obtenir la même chaîne résultante
Si la chaîne ne se termine pas toujours par 8 caractères que vous souhaitez supprimer, vous pouvez rechercher le "_S" et obtenir l'emplacement actuel. Essaye ça:
=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
Merci pour l’idée de décomposer une formule Werner !
Utiliser Alt + Entrée permet de mettre chaque bit d'une formule de substitution complexe sur des lignes distinctes: elles deviennent plus faciles à suivre et s'alignent automatiquement lorsque vous appuyez sur Entrée.
Assurez-vous simplement que vous avez suffisamment d'instructions de fin pour correspondre au nombre de lignes substitute(
de part et d'autre de la référence de cellule.
Comme dans cet exemple:
=
substitute(
substitute(
substitute(
substitute(
B11
,"(","")
,")","")
,"[","")
,"]","")
devient:
=
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
qui fonctionne bien tel quel, mais on peut toujours supprimer les paragraphes supplémentaires manuellement:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
Nom> substitute ()
[Samoa américaines]> Samoa américaines
J'utiliserais l'approche suivante:
=SUBSTITUTE(LEFT(A2,LEN(A2)-X),"_","-")
où X
indique la longueur des choses que vous ne recherchez pas. Et, pour X
j'utiliserais
(ISERROR(FIND("_S",A2,1))*2)+
(ISERROR(FIND("_40K",A2,1))*4)+
(ISERROR(FIND("_60K",A2,1))*4)+
(ISERROR(FIND("_AB",A2,1))*3)+
(ISERROR(FIND("_CD",A2,1))*3)+
(ISERROR(FIND("_EF",A2,1))*3)
La ISERROR(FIND("X",.,.))*x
ci-dessus retournera 0 si X
est introuvable et x
(la longueur de X
) si elle est trouvée. Donc techniquement, vous coupez A2
de la droite avec des correspondances possibles.
L’avantage de cette approche par rapport à l’autre, c’est qu’il est plus évident de savoir quelle substitution (ou élimination) a lieu, puisque la "substitution" n’est pas imbriquée.