Frage Konvertieren von Barcodes in ein bestimmtes Format mit IF, FIND & MID-Funktion von Excel


In Excel habe ich eine Reihe von Spalten, die Zeichen verschiedener Typen enthalten:

WS-S5-S-L1-C31-F-U5-S9-P14 
WS-S5-S-L1-C31-F-U5-S8-P1 
WS-S5-N-L1-C29-V-U16-S6-P6 

Ich möchte diese mit den folgenden Regeln in 8 Zeichen konvertieren:

  • behalte nur die letzten drei Segmente
  • Entferne das U und füge gegebenenfalls das Präfix 0 hinzu
  • entferne S und füge gegebenenfalls das Präfix 0 hinzu
  • entferne P und füge gegebenenfalls das Präfix 0 hinzu

Beispielsweise:

  • WS-S5-S-L1-C31-F-U5-S9-P14 konvertieren zu 05-09-14
  • WS-S5-S-L1-C31-F-U5-S8-P1 konvertieren zu 05-08-01
  • WS-S5-N-L1-C29-V-U16-S6-P6 konvertieren zu 16-06-06

Ich glaube, es gibt einen Weg zu nutzen IF, FIND & MID Funktion, um diese in Excel zu konvertieren, aber nicht wissen, wie zu starten. Jede Hilfe wird sehr geschätzt.

Aktualisieren

Zum Schluss wollte ich das, wenn möglich, zum Beispiel in 13 Zeichen umwandeln:

  • WS-S5-S-L1-C31-F-U5-S9-P14 konvertieren zu S1-F-05-09-14
  • WS-S5-N-L2-C31-D-U5-S8-P1 umwandeln zu N2-D-05-08-01
  • WS-S5-N-L1-C29-V-U16-S6-P6 konvergieren zu N1-V-16-06-06

4
2018-05-23 04:08


Ursprung


Sind die Saiten immer gleich lang? - Kevin Anthony Oppegaard Rose
@Kevin: Nein, siehe "U5" vs "U16" - Máté Juhász
Strings haben unterschiedliche Länge und ich habe die folgende Formel verwendet, die "05" von WS-S5-S-L1-C31-F-U5-S9-P14 zurückgibt. Aber wie kann ich "05-09-14" zurückgeben? = IF (MID (E13, FIND ("- U", E13) +3,1) = "-", "0" und MID (E13, FIND ("- U", E13) +2,1), MID ( E13, FIND ("- U", E13) +2,2)) - Indy


Antworten:


Wie @ygaft schon sagte, ist es möglich, aber mit den Standard-Excel-Funktionen wird es lange dauern.

Ich benutze kostenlos RegEx Suchen / Ersetzen Add-In in einer solchen Situation, mit einem regulären Ausdruck können Sie es einfacher erreichen.

Die Formel:
=RegExReplace(RegExReplace(A1,".*U([0-9]+)-S([0-9]+)-P([0-9]+)","0$1-0$2-0$3"),"0([0-9]{2})","$1")

Wie es funktioniert:

  • innere Funktion:
    • A1: aus dem Inhalt der A1-Zelle
    • ".*U([0-9]+)-S([0-9]+)-P([0-9]+)" Suchen Sie nach einem Muster "... U # -S # -P #", wobei "#" für eine oder mehrere Zahlen steht und die Zahlen speichert (Klammern erzeugen Referenzgruppen)
    • "0$1-0$2-0$3" fügt die im vorherigen Schritt gefundenen Zahlen zusammen und fügt allen die führende 0 hinzu.
  • äußere Funktion:
    • RegExReplace(...) - Arbeitet mit Ergebnissen der inneren Funktion
    • "0([0-9]{2})" - sucht nach 0 gefolgt von zwei Ziffern (= Fälle, in denen die führende 0 nicht notwendig ist)
    • "$1" - Behält nur die zwei Ziffern bei und gibt die führende 0 aus (nur in Fällen, die im vorherigen Schritt übereinstimmen)

enter image description here

Sie können auch mehr Erklärungen zu den regulären Ausdrücken online sehen:

Hinweis: Ich bin in keiner Weise mit diesem Add-In verbunden, benutze es einfach, da es mein Leben einfacher macht.

Aktualisieren

Sie können diese Formel für Ihren 13-stelligen Code verwenden:
=RegExReplace(RegExReplace(A3,".*-([A-Z])-[A-Z]([0-9]).*-([A-Z])-U([0-9]+)-S([0-9]+)-P([0-9]+)","$1$2-$3-0$4-0$5-0$6"),"0([0-9]{2})","$1")


6
2018-05-23 08:21



Das ist ein großartiges Add-In zu verwenden. Arbeitete perfekt. Nur zum Schluss wollte ich dies wenn möglich in 13 Zeichen umwandeln: * WS-S5-S-L1-C31-F-U5-S9-P14 umwandeln zu S1-F-05-09-14 * WS-S5- N-L2-C31-D-U5-S8-P1 umwandeln zu N2-D-05-08-01 * WS-S5-N-L1-C29-V-U16-S6-P6 umwandeln zu N1-V-16- 06-06 - Indy
wie meinst du 13 Charaktere? Bitte aktualisieren Sie Ihre Frage und ich werde meine Antwort aktualisieren - Máté Juhász
Grundsätzlich umwandeln: • WS-S5-S-L1-C31-F-U5-S9-P14 bis S1-F-05-09-14 • WS-S5-N-L2-C31-D-U5-S8-P1 bis N2-D-05-08-01 • WS-S5-N-L1-C29-V-U16-S6-P6 bis N1-V-16-06-06 Verwenden Sie also das 7., 10., 15., 16. und 17. Zeichen - Indy


Ziemlich hässlich,
Sie können es jedoch folgendermaßen erreichen: Es wird davon ausgegangen, dass sich Ihre Arbeitsdaten in Spalte A befinden:

=TEXT(LEFT(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)-1),"00")&"-"&TEXT(MID(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),FIND("-",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)+2,(FIND("P",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)-2-FIND("S",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1))),"00")&"-"&TEXT(RIGHT(RIGHT(A1,LEN(A1)-FIND("U",A1,1)),LEN(RIGHT(A1,LEN(A1)-FIND("U",A1,1)))-FIND("P",RIGHT(A1,LEN(A1)-FIND("U",A1,1)),1)),"00")

5
2018-05-23 07:22



große Technik verwendet, aber Code läuft ein bisschen lang. - Indy
um es kürzer zu machen, können Sie eine Hilfsspalte mit dieser Funktion hinzufügen: '= RECHTS (A1, LEN (A1) -FIND ("U", A1,1)) und dann auf diese Spalte anstelle des ganzen Codeabschnitts verweisen - ygaft