Excelliste: Mehreren Zeilen in Spalten umwandeln
Hallo Leute,
ich habe hier ein Protokoll mit vielen Zeilen. Zusammengehörende Informationen sind hier auf mehrere Zeilen verteilt und werden untereinander in mehreren Zeilen ausgegeben.
Jeder zusammengehörende „Block“ wird durch einen * von dem nächsten „Block“ getrennt.
Beispiel:
*
Fall 1: Meldung 1
Fall 1: Meldung 2
*
Fall 2: Meldung 1
Fall 2: Meldung 2
Fall 2: Meldung 3
Fall 2: Meldung 4
*
Die Liste möchte ich nun so umwandeln, dass alle Zeilen eines „Blocks“ in eine Zeile mit mehreren Spalten geschrieben werden. Die Frage ist nur, Wie?
Gewünschte Lösung des Beispiels:
Fall 1: Meldung 1 Fall 1: Meldung 2
Fall 2: Meldung 1 Fall 2: Meldung 2 Fall 2: Meldung 3 Fall 2: Meldung 4
Ich hoffe, jemand von Euch hat eine Idee, die mir weiterhilft.
Vielen Dank
MarioS
Antwort schreiben
Antwort 1 von Beverly vom 19.11.2019, 19:24 Options
Hi Mario,
schau mal auf meine HP, Seite "Beispiele m. VBA". Dort findest du das Beispiel "Transponieren". Das sollte auch bei deinem Tabellenaufbau funktionieren, wenn du alle Zeilen mit einem * löschst.
Link zum DownloadBis später,
Karin
Antwort 2 von Marie vom 19.11.2019, 20:27 Options
Es wäre jetzt, bevor ich Dir eine Lösung liefern kann, von Wichtigkeit zu wissen, ob: Fall 1: Meldung 1 in einer Spalte steht, oder Fall1: in einer Spalte und Meldung 1 in der nächsten Spalte.
Das sind natürlich zwei total unterschiedliche Lösungswege. Beides ist relativ einfach, aber falls das zwei unterschiedliche Spalten sind, ist es weniger Arbeit. Deshalb warte ich mal erst Deine Antwort ab.
Gruß Marie
Antwort 3 von batti-batch vom 19.11.2019, 20:33 Options
Hallo MarioS,
vielleicht hilft Dir ein Link zu einem anderen Problem, welches hier schon mal aufgetaucht ist:
http://www.supportnet.de/threads/1569952Man sollte aber anmerken, das "Transponieren" erst ab Excel 2002 verfügbar ist.
Viel Spaß.
Herzliche Grüße
batti-batch
Antwort 4 von MarioS vom 20.11.2019, 12:29 Options
Hallo an alle Helfer,
leider habe ich das Beispiel ungeschickt formuliert. In den Zeilen steht am Anfang nicht Fall… vielmehr steht hier eine Fehlermeldung die sich über mehrere Zeilen verteilt.
Die Zeilen der Fehlermeldung eines Fehlers (Fall) stehen immer untereinander und werden von der nächsten Fehlermeldung durch den * getrennt. Leider variiert die Anzahl der Zeilen der verschiedenen Fehlermeldung von Fall zu Fall. Die gesamte Liste ich einige tausend Zeilen lang.
Ich suche nun eine Lösung die am * erkennt, hier beginnt die Fehlermeldung und nun jede folgende Zeile (bis zum nächsten *) in eine Spalt hinter den Text der ersten Zeile der Fehlermeldung schreibt.
Neues Beispiel:
*
abcderf
sgetd
dghet
*
abdge
dtgeb
*
Gewünschtes Ergebnis
Spalte 1 Spalte 2 Spalte 3
Zeile1: abcderf sgetd dghet
Zeile2: abdge dtgeb
Ich hoffe ich konnte das Problem besser schildern.
Gruß MarioS
Antwort 5 von MarioS vom 20.11.2019, 12:32 Options
Antwort auf die Frage von Marie:
Der Text (einer Zeile) steht immer in einer Spalte.
Gruß MarioS
Antwort 6 von Marie vom 20.11.2019, 13:14 Options
Na dann versuch mal das hier (als Visual Basic Code einfügen):
Gruß Marie
Sub transponieren()
Dim Zeile As Integer
Dim Spalte As Integer
Dim iZeile As Integer
' alles von einem * zum nächsten soll nebeneinander geschrieben werden
' ich gehe davon aus, dass es keine Leerzeilen gibt
' ferner, dass ausgefüllte Spalte Spalte 1 ist und Celle 1;1 mit * beginnt
' Tabelle1 kann man mit suchen - ersetzen natürlich abändern, falls nicht zutreffend
Zeile =1 ' Zeile aus der gelesen wird
iZeile = 1 ' Zeile in die geschrieben wird
While Tabelle1.Cells(Zeile, 1) <> ""
Spalte = 1
While Tabelle1.Cells(Zeile, 1) <> "*"
Tabelle1.Cells(iZeile, Spalte) = Tabelle1.Cells(Zeile, 1)
Spalte = Spalte + 1
Zeile = Zeile + 1
Wend
iZeile = iZeile + 1
Zeile = Zeile + 1
Wend
End Sub
Antwort 7 von MarioS vom 20.11.2019, 14:14 Options
Hallo Marie,
das scheint mir die Lösung gewesen zu sein. Ich werde das gleich mal Testen.
Vielen Dank
MarioS