Excel - Liste der Teilzeichenfolgen in großen Zeichenfolgen nachschlagen

484
DimitrisX

Ich habe mit dem folgenden gekämpft; könnte eine kleine Herausforderung sein.

Ich habe eine Excel-Datei, die aus einer XML-Anwendung exportiert wurde.

Blatt 1 enthält Reihen von Zeichenfolgen wie die unten. Jede ungeradzahlige Zeile enthält etwa 10 solcher Zeichenfolgen, dies kann jedoch variieren. (Ich suche nach einer Lösung zum Ausfüllen der geraden Reihen; siehe unten.)

Blatt 2, Spalte A, enthält eine Reihe von Zeichenketten wie Measurement_1, Ref_Nound Maximum_Velocity, genannt Attribute .

Ich muss jedes dieser Attribute in jeder Zelle jeder ungeradzahligen Zeile von Blatt 1 nachschlagen und jedes eindeutige Attribut, das als Unterzeichenfolge in diesen Zeichenfolgen erscheint, in eine neue Zeile darunter einfügen, jeweils in einer eigenen Zelle.

Beachten Sie, dass jeder Wert in den generierten Zeilen eindeutig sein muss.

Gibt es eine Funktion, einen regulären Ausdruck oder ein VBA-Skript, die das tun können? Ich habe ausgiebig in den Foren und anderswo gesucht und es selbst nicht geschafft.

Ich hoffe, das macht alles Sinn, aber ich erkläre gerne alles, was Kauderwelsch ist!


Zeile 1

Cell A1: <ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" - "></ref></ref>  Cell B1: "<ref attrid="Ref_No" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Unit" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" "><ref attrid="Vector" equalsign="=" includeattrname="false" resolveto="value" separator=" (Dia)"><ref attrid="Object_Diameter" equalsign="=" includeattrname="false" resolveto="unit" separator=""><ref attrid="Thread_Size" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=","><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" "><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" of ">"  Cell C1: CONCATENATE("This ", LOWER(VAL("Device_Type")),F(AND(EXACT(VAL("Max_Temperature_Range"),("")),EXACT(VAL("Min_Temperature_Range"),"")),".",CONCATENATE("appeared to operate safely from a minimum temperature of ", VAL("Min_Temperature_Range"),UNIT("Min_Temperature_Range")," to a maximum temperature of ", VAL("Max_Temperature_Range"),UNIT("Max_Temperature_Range"),"."))) 

Die gewünschte Ausgabe in Zeile 2 würde folgendermaßen aussehen:

Cell A2:Measurement_1 Cell B2:Ref_No Cell C2:Object_Diameter Cell D2:Object_Length Cell E2:Device_Type Cell F2:Max_Temperature_Range Cell G2:Min_Temperature_Range 
0
(0) +1 für die Untertreibung des Monats: „Vielleicht eine kleine Herausforderung.“ (1) Die Zellenstruktur der ungeradzahligen Zeilen scheint ein roter Hering zu sein. Wenn "A17" enthält "Wie", "C17" enthält "Jetzt", "E17" enthält "Braun" und "Q17" enthält "Kuh", möchten Sie "A18" = "Wie", "B18" = "jetzt "," C18 "=" braun "und" D18 "=" Kuh "- genauso, als wenn" F17 "" wie "," jetzt "," braun ", *** und ***" Kuh "enthalten hätte ”. Recht? … (Fortsetzung) Scott vor 8 Jahren 0
(Forts.)… (2) Warum soll Ihre Ausgabe nicht "Einheit" und "Vektor" enthalten, wie in Mikes Antwort? Ist es, weil sie nicht in "Blatt 2! Spalte A" sind? Wenn ja, sollten Sie uns diese (vollständige) Spalte als Teil des Beispiels gegeben haben. (3) Müssen die Ergebnisse in Zeile 42 in der Reihenfolge des ersten Auftretens in Zeile 41 sein oder sind sie in Ordnung, wenn sie in der Reihenfolge von "Blatt 2! Spalte A" liegen? (4) Was ist der Deal mit der Tatsache, dass "B1" mit Zitaten beginnt und endet, wenn "A1" nicht der Fall ist? Sollen wir das einfach ignorieren? … (Fortsetzung) Scott vor 8 Jahren 0
(Fortsetzung)… (5) Wenn eine ungeradzahlige Zeile nur "Ref_No" enthält, zählt das "zählen" oder muss es `attrid =" Ref_No "sein? - oder `` ⁠ attrid = "Ref_No" `` mit Leerzeichen vor und nach? Wie wäre es mit 'attrid = Ref_No` (ohne Anführungszeichen)? (6) Nur aus Neugier, ist es "attrid" oder "attrib"? (7) Was ist der Deal mit "C1"? Ist das ein anderer roter Hering - ein Geräuscheintrag, der ignoriert werden muss - oder besteht die Möglichkeit, dass eine solche Zeichenfolge einen Teilstring enthält, der gefunden werden muss? … (Fortsetzung) Scott vor 8 Jahren 0
(Fortsetzung)… (8) Sie haben `A1` gezeigt, das zwei Instanzen von` attrid = "Measurement_1" `enthält. Ich nehme an, selbst wenn "A1" einen und "D1" einen anderen enthielt, würden Sie möchten, dass "Messung_1" nur einmal in Zeile 2 gemeldet wird. Was passiert jedoch, wenn Zeile 83 auch 'attrid = "Measurement_1" `enthält? Möchten Sie `Measurement_1` dann in Zeile 84 melden? (00) Bitte antworten Sie nicht in Kommentaren. Bearbeiten Sie Ihre Frage, um sie klarer zu machen. Scott vor 8 Jahren 0

1 Antwort auf die Frage

0
Mike Honey

Ihre XML-Zeichenfolgen sehen ungerade aus - viele unvollständige Tags?

Auf jeden Fall würde ich mit der XML-Datei beginnen und sie mit dem Power Query Add-In laden. Dies hat einen speziellen "From XML" -Handler, und Sie können die Daten mit den Power Query-Befehlen auf einfache Weise entlang des Wegs formen.

Hier ist ein Beispiel, das ich mit einer bearbeiteten Version Ihres XML-Inhalts erstellt habe (ich habe ein Stammelement und schließende Tags hinzugefügt, um es zu einer gültigen XML-Datei zu machen).

Power Query - from XML file example

Die einzige Aktion, die notwendig schien, um das zu erreichen, was Sie erreichen möchten, war die Auswahl der Spalte Attribut: attrid und dann Entfernen von Spalten / Entfernen anderer Spalten.

Sie sehen das Ergebnis im Hintergrund - eine Excel-Tabelle. Bei jeder Änderung der XML-Datei klicken Sie einfach auf Aktualisieren, um die Power Query erneut auszuführen.

Vielen Dank für die Antwort. Leider kann ich keine Add-Ins in meiner Organisation installieren. Ideen, für die keine Add-Ins erforderlich sind? Außerdem wusste ich nicht, dass Excel XML tatsächlich "verstehen" kann. Ich dachte eher, es wäre ein Suchvorgang, deshalb habe ich beim Kopieren und Einfügen keine Rücksicht auf die Syntax genommen. DimitrisX vor 8 Jahren 0