webentwicklung-frage-antwort-db.com.de

Wie kann ich mehrere verschachtelte Substitute-Funktionen in Excel kombinieren?

Ich versuche, eine Funktion einzurichten, um eine Zeichenfolge neu zu formatieren, die später verkettet wird. Eine Beispielzeichenfolge würde folgendermaßen aussehen:

Standard_H2_W1_Launch_123x456_S_40K_AB

Manchmal existiert das "S" nicht, und manchmal ist "40K" "60K" oder nicht, und "_AB" kann auch "_CD" oder _ "EF" sein. Schließlich müssen alle Unterstriche in Bindestriche geändert werden. Das Endprodukt sollte so aussehen:

Standard-H2-W1-Launch-123x456-

Ich habe vier Funktionen, die, wenn sie nacheinander ausgeführt werden, für all dies sorgen werden:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")

=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")

=SUBSTITUTE(C2,"_S_","_")

=SUBSTITUTE(D2,"_","-")

Ich habe eine Reihe von Möglichkeiten ausprobiert, um diese Funktionen in einer Funktion zu kombinieren, aber ich bin relativ neu auf dieser Excel-Ebene, also bin ich ratlos. Gibt es überhaupt irgendetwas, um all dies so zu kombinieren, dass es einen Befehl nach dem anderen in einer Zelle ausführt?

11
samanthathyme

Um sie einfach zu kombinieren, können Sie sie alle so zusammenstellen:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-")

(Beachten Sie, dass dadurch möglicherweise das ältere Excel-Limit von 7 verschachtelten Anweisungen überschritten wird. Ich teste in Excel 2010


Eine andere Möglichkeit besteht darin, die Funktionen Left und Right zu verwenden.

Dies setzt voraus, dass die sich ändernden Daten am Ende immer vorhanden sind und 8 Zeichen lang sind

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

Dadurch wird die gleiche Zeichenfolge erzielt


Wenn die Zeichenfolge nicht immer mit 8 Zeichen endet, die Sie entfernen möchten, können Sie nach "_S" suchen und den aktuellen Speicherort abrufen. Versuche dies:

=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
16
Portland Runner

Danke für die Idee, eine Formel zu zerlegen Werner

Mit Alt + Enter können Sie jedes Bit einer komplexen Ersatzformel in separaten Zeilen platzieren: Sie werden einfacher zu folgen und richten sich automatisch aus, wenn Sie die Eingabetaste drücken.

Stellen Sie nur sicher, dass Sie über genügend Endanweisungen verfügen, um mit der Anzahl der substitute(-Zeilen auf beiden Seiten der Zellreferenz übereinzustimmen.

Wie in diesem Beispiel:

=
substitute(
substitute(
substitute(
substitute(
B11
,"(","")
,")","")
,"[","")
,"]","")

wird:

=
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")

was gut funktioniert, aber man kann die zusätzlichen Absätze immer manuell löschen:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")

Name> Stellvertreter ()

[Amerikanisch-Samoa]> Amerikanisch-Samoa

2
Phil
  • das Verschachteln von SUBSTITUTE() in einem String kann unangenehm sein, es ist jedoch immer möglich, ihn zu arrangieren: 

 Screenshot formula bar

1
player0

Ich würde den folgenden Ansatz verwenden:

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

wobei X die Länge von Dingen bezeichnet, die Sie nicht suchen. Und für X würde ich verwenden

(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)

Die obige ISERROR(FIND("X",.,.))*x gibt 0 zurück, wenn X nicht gefunden wird, und x (die Länge von X), falls sie gefunden wird. Technisch gesehen trimmst du A2 von rechts mit möglichen Übereinstimmungen.

Der Vorteil dieses Ansatzes gegenüber dem anderen ist, dass es offensichtlicher ist, welche Substitution (oder Entfernung) stattfindet, da die "Substitution" nicht verschachtelt ist.

1
Werner