Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

3 wiederkehrende werte aus langer zeile trennen und in neue spalten
#1
Hola los Todos!

Ich habe eine Liste mit folgendem Inhalt pro ZEILE:

Code:
<option label="Bulgarisch" value="number:1">Bulgarisch</option><option label="Dänisch" value="number:4">Dänisch</option><option label="Deutsch" value="number:10" selected="selected">Deutsch</option><option label="Englisch" value="number:6">Englisch</option><option label="Estnisch" value="number:7">Estnisch</option><option label="Finnisch" value="number:8">Finnisch</option><option label="Französisch" value="number:9">Französisch</option><option label="Griechisch" value="number:11">Griechisch</option><option label="Irisch" value="number:14">Irisch</option><option label="Isländisch" value="number:13">Isländisch</option><option label="Italienisch" value="number:15">Italienisch</option><option label="Kroatisch" value="number:2">Kroatisch</option><option label="Lettisch" value="number:16">Lettisch</option><option label="Litauisch" value="number:17">Litauisch</option><option label="Maltesisch" value="number:18">Maltesisch</option><option label="Niederländisch" value="number:5">Niederländisch</option><option label="Norwegisch" value="number:19">Norwegisch</option><option label="Polnisch" value="number:20">Polnisch</option><option label="Portugiesisch" value="number:21">Portugiesisch</option><option label="Rumänisch" value="number:22">Rumänisch</option><option label="Schwedisch" value="number:26">Schwedisch</option><option label="Slowakisch" value="number:23">Slowakisch</option><option label="Slowenisch" value="number:24">Slowenisch</option><option label="Spanisch / Kastilisch" value="number:25">Spanisch / Kastilisch</option><option label="Tschechisch" value="number:3">Tschechisch</option><option label="Ungarisch" value="number:12">Ungarisch</option>

Die Struktur ist immer:

Code:
<option label=" WERT1" value="number:WERT2">WERT3</option>


Ich bräuchte eine Lösung, die diese drei WERTE in die Spalten C, D und E schreibt.

Also in A1 steht die lange Zeile, in B1 die Formel, in C1 WERT1, in D1 WERT2 und in E1 WERT3. Der Rest kann weg.

Oder anders gesagt

C1 D1 E1
Bulgarisch 1 Bulgarisch
Dänisch 4 Dänisch
Deutsch 10 Deutsch
usw.

Danke und Gruss

Peter
Antworten Top
#2
Hallo,

keine Ahnung, ob ich jetzt 100 Prozent verstanden habe, was Du möchtest - anbei jedoch eine benutzerdefinierte VBA-Funktion,
die Dir je nach Parametern die Werte in eine Zelle schreibt. Textumbruch für die Zielzellen einschalten.


Code:
A1 = Der XML Text
C1 = XMLSplitter(A1;"label")
D1 = XMLSplitter(A1;"value")
E1 = XMLSplitter(A1)

Code:
Public Function XMLSplitter(Source As Range, Optional Key As String) As String
  
  Dim d() As String
  Dim r   As String
  Dim n   As Long

  r = ""
  d = Split(Replace(Source.Cells(1, 1).Value, "><", ">$<"), "$")
  
  Select Case Key
    
    Case "label"
      
      For n = LBound(d, 1) To UBound(d, 1)
        
        r = r & Split(Split(d(n), Key & "=""")(1), """")(0)
        r = r & IIf(n < UBound(d, 1), vbCrLf, "")
        
      Next
      
    Case "value"
      
      For n = LBound(d, 1) To UBound(d, 1)
        
        r = r & Split(Split(Split(d(n), Key & "=""")(1), """")(0), ":")(1)
        r = r & IIf(n < UBound(d, 1), vbCrLf, "")
        
      Next
      
    Case Else
      
      For n = LBound(d, 1) To UBound(d, 1)
        
        r = r & Split(Split(d(n), """>")(1), "</")(0)
        r = r & IIf(n < UBound(d, 1), vbCrLf, "")
        
      Next
      
  End Select
  
  XMLSplitter = r
  
End Function

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#3
Moin

Also WERT1 und WERT3 sind immer identisch? Dann kann man sich ja WERT3 ersparen.

Lösung in M-Code (Power Query):

Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Column1", Splitter.SplitTextByDelimiter("</option>", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1", type text}}),
    #"Inserted Text Between Delimiters" = Table.AddColumn(#"Changed Type1", "Text Between Delimiters", each Text.BetweenDelimiters([Column1], "=", " "), type text),
    #"Inserted Text Between Delimiters1" = Table.AddColumn(#"Inserted Text Between Delimiters", "Text Between Delimiters.1", each Text.BetweenDelimiters([Column1], ":", ">"), type text),
    #"Removed Columns" = Table.RemoveColumns(#"Inserted Text Between Delimiters1",{"Column1"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each [Text Between Delimiters] <> null and [Text Between Delimiters] <> "")
in
    #"Filtered Rows"
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#4
Moin Jungs!

Herzlichen Dank für die Lösungen.

Wie füge ich die Codes denn in die Excelliste ein, damit ich es nutzen kann?

Oder würdet Ihr mir den Code bitte in die Beispielliste einbauen? (s.Anhang)

P.S. WERT1 und WERT3 sind FAST immer gleich (Bei der Beispielliste schon, aber leider NICHT immer).

Gruss

Peter


Angehängte Dateien
.xlsx   3 wiederkehrende werte aus langer zeile trennen und in neue spalten.xlsx (Größe: 8,48 KB / Downloads: 5)
Antworten Top
#5
Hallo,

für die VBA-Lösung.

Gruß


Angehängte Dateien
.xlsm   3 wiederkehrende werte aus langer zeile trennen und in neue spalten.xlsm (Größe: 18,19 KB / Downloads: 3)
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#6
Hallo,

wenn man den gegeben Text am Anfang um und am Ende um ergänzt, dann geht:

Code:
[xml]$XML = get-content C:\Users\User\Desktop\iXML.xml
#$xml.FirstChild.InnerText
for ($i=0;$i -le $xml.ChildNodes.option.count; $i++) {
    $xml.ChildNodes.option[$i].InnerText
}

mfg

(Powershell)
Antworten Top
#7
Hi Mourad!

Danke für die Liste.

Mit meiner Beispielzeile funktioniert es prima.

Nur wenn ich A1 durch eine andere Zeile wie meine Beispielzeile zum trennen austausche passiert nichts

Wie kann ich den Code denn mit einer anderen Liste starten/nutzen?

Gruss

Peter

Hi Fennek!

Danke für den Code. 

Für welchen der beiden vorgeschlagenen Lösungen ist der denn gedacht?

Gruss

Peter
Antworten Top
#8
dieser Code liest alle 3 Werte aus:

Code:
[xml]$XML = get-content C:\Users\xxxxx\Desktop\iXML.xml # anpassen

for ($i=0;$i -le $xml.ChildNodes.option.count-1; $i++) {
    
    $label = $xml.ChildNodes.option[$i].label
    $val = $xml.ChildNodes.option[$i].value.Split(":")[1]
    $inTx = $xml.ChildNodes.option[$i].InnerText
    write-host ($label, $val,$inTx)
}
Antworten Top
#9
Code:
Sub M_snb()
   Cells(1).Replace Left(Cells(1), 15), ""
   Cells(1).Replace """ value=""number:", "|"
   Cells(1).Replace "</option>", "|"
   Cells(1).Replace """>", "|"
   Cells(1).Replace """ selected=""selected", ""
   Cells(1).Replace " ", ""
   Cells(1).TextToColumns , , , , 0, 0, 0, 0, -1, "|"
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#10
Danke an alle!

Also aktuell habe ich jetzt vier offene Baustellen:

snb = Deinen Code habe ich zum Laufen gekriegt, aber er trennt alles in eine Zeile. Also nebeneinander und ich bräuchte die getrennten 3-er Blöcke untereinander in Spalte C, D und E.

fennek = Ich verstehe leider nicht wie und wo ich Deinen Code zum Laufen kriegen soll. Soll ich die Datei umbenennen und auf dem Desktop speichern? Kannst Du mir bitte eine Liste schicken wo das läuft?

shift-del = Wie kriege ich M-Code (Power Query) zum Laufen? Kannst Du mir bitte eine Liste schicken wo das läuft?

manimweb = Mit meiner Beispielzeile funktioniert es prima. Nur wenn ich A1 durch eine andere Zeile wie meine Beispielzeile zum trennen austausche passiert nichts. Wie kann ich den Code denn mit einer anderen Liste starten/nutzen?

Danke

Peter
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste