web-dev-qa-db-fra.com

Comment combiner plusieurs fonctions de remplacement imbriquées dans Excel?

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?

11
samanthathyme

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)),"_","-")
16
Portland Runner

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

2
Phil
  • imbriquer SUBSTITUTE() dans une chaîne peut être méchant, cependant, il est toujours possible de l'arranger: 

 Screenshot formula bar

1
player0

J'utiliserais l'approche suivante:

=SUBSTITUTE(LEFT(A2,LEN(A2)-X),"_","-")

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.

1
Werner