Excel-Profis vor: Zelleninhalt aufteilen (notfalls mit VBA)

fox78

Aktives Mitglied
Thread Starter
Dabei seit
02.02.2004
Beiträge
2.782
Reaktionspunkte
366
Hallo,

ich sitze gerade auf Arbeit vor folgendem Probem:
In einer automatisch generierten Tabelle gibt es eine Spalte mit Zellen, die teilweise und in unterschiedliche Anzahl Zeilenumbrüche enthalten. Diese Daten werden per Verkettungsbefehl aus anderen Feldern generiert.
Die einzelnen Zeilen innerhalb der Zelle benötige ich aber als einzelne Zellen nebeneinander.

Also von bspw. 3 Zellen in einer Spalte:

120L
1345
256RR
NOTE
------
150R
------
NABC
220LR


möchte ich zu diesen Zeilen und Spalten kommen:


120L | 1345 | 256RR | NOTE |
-----------------------------
150R |
-----------------------------
NABC | 220LR |


Nur wie? :confused:

Wie aus dem Beispiel ersichtlich, haben die Zellinhalte keine einheitliche Syntax und Zeichenlänge.
Die Funktion Daten -> Text in Spalten... funktioniert wegen der Verkettung nicht.
Und Google spuckt nur Lösungen aus, die entweder gleiche Datensyntax (immer zwei Ziffern gefolgt genau von soundsoviel Zeichen etc.) oder andere Trennungszeichen vorraussetzen.
Auch ein paar rudimentäre Makros habe ich gefunden, die aber nicht genau das tun, was mir vorschwebt und ich habe keinen Schimmer, wie ich die Umbiegen muss (habe keinerlei Erfahrung damit).

Eines z.B. schreibt die einzelnen Zeilen der Zellinhalte als neue einzelne Zellen untereinander in eine neue Spalte nebendran. Evt. hilft das jemanden als Ausgangspunkt:

Code:
Option Explicit

Sub Zellen_Splitten()
       Dim DatFeld
       Dim i As Integer, j As Long
       Dim rZelle As Range, rBereich As Range
       
       Set rBereich = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
       
       Application.ScreenUpdating = False
       rBereich.Offset(0, 1).EntireColumn.Insert
       
       For Each rZelle In rBereich
              DatFeld = Split(rZelle, Chr(10))
                
              For i = 0 To UBound(DatFeld)
                     j = j + 1
                     Cells(j, 2) = DatFeld(i)
              Next
       Next

       Application.ScreenUpdating = True
End Sub

Vielen Dank für Eure Hilfe,
fox78
 
Hi,

ändere das mal wie folgt:
PHP:
// Statt...
Cells([B]j, 2[/B]) = DatFeld(i)

// So...
Cells([B]1, j[/B]) = DatFeld(i)
 
Stört dabei nicht das:

Code:
rBereich.Offset(0, 1).EntireColumn.Insert

fox78
 
Die Funktion Daten -> Text in Spalten... funktioniert wegen der Verkettung nicht.

Wenn Du den Inhalt kopierst und in eine neue Zeile über Einfügen --> Werte einfügst, sollte es funktionieren.
Die Umbrüche kannst Du mit Suchen & Ersetzen entfernen und durch z.B. einen Trenner wie Pipe ersetzen. Und dann halt Text in Spalten.

Also, denke ich jetzt mal so, ich habe gerade kein Excel vor mir. :)
 
Wenn Du sagst, die Daten werden von gerade erst generiert, dann setze an dieser Stelle an. Versuche ein einheitliches Format der Daten zu finden (zb alle mit 5 Zeichen, ggf. mit Füllzeichen) und einem einheitlichen Datentrenner.
Das erleichtert die weitere Verarbeitung erheblich, weil Du nicht 700 Sonderfälle berücksichtigen musst.
Für das Entfernen der Füllzeichen zum Schluss wird sich ja noch eine Trimmfunktion finden lassen.
 
Zurück
Oben Unten