Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA + Text in Spalten

VBA + Text in Spalten
wolfgang
Hallo Exelprofis
Ich habe eine sehr große Textdatei die ich in Excel einlese.
Jetzt möchte ich die Inhalte mit Text in Spalten aktualisieren
Klappt auch mit
Columns(2).TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, OtherChar:="#"
nur das dauert ziemlich lange(sehrgroße Datei)
Frage :
Gibt es auch nee Möglichkeit die Trennung im Arbeitsspeicher vorzunehmen um
dann die Tabelle in das Arbeitsblatt einzufügen?
gruß wolfgang
Anzeige
AW: VBA + Text in Spalten
26.02.2010 21:08:55
Ramses
Hallo
"...Gibt es auch nee Möglichkeit die Trennung im Arbeitsspeicher vorzunehmen..."
Dazu müsstest du die Daten zuerst in den Arbeitsspeicher einlesen, trennen und wieder schreiben.
Aber kannst es mal probieren.
Daten in ein Array einlesen, mit Spit trennen und wieder zurückschreiben.
Bei VBA-Gut sollte das ja kein Problem sein.
Alternativ würde ich aber einfach mal das probieren
Application.Screenupdating = False
Columns(2).TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, OtherChar:="#"
Application.Screenupdating = True
Gruss Rainer
Anzeige
AW: VBA + Text in Spalten
26.02.2010 21:26:23
wolfgang
Hallo Rainer
Danke für Deine Antwort
mit Screenupdating hab ichs schon probiert
es sind halt 65000 zeilen und 30 spalten
Mit splitt habe ich es auch schon versucht. Das war noch langsamer.
Weil ich ja jede zeile trennen muß.
Aber es passiert ja manchmal das nach copy und paste Excel die Daten automatisch trennt.
Und da bin ich noch nicht hinter gestiegen wann das der Fall ist.
gruß wolfgang
Anzeige
AW: VBA + Text in Spalten
26.02.2010 21:40:18
Ramses
Hallo
Was heisst für dich denn genau:
"...das dauert lange..:"
Kannst du das mal in Sekunden angeben ?
Gruss Rainer
AW: VBA + Text in Spalten
26.02.2010 21:53:40
wolfgang
Hallo Rainer
so ca 3 min
dann ist alles geordnet in den zellen
aber wenn der Anwender davor sitzt wird er schon nervös.
gruß wolfgang
AW: VBA + Text in Spalten
27.02.2010 08:01:08
Ramses
Hallo
Kannst du mal ein paar Datensätze dieser CSV anonymisieren und hier darstellen ?
Gruss Rainer
Anzeige
AW: VBA + Text in Spalten
27.02.2010 19:17:51
wolfgang
Hallo Rainer
Super das Du dich noch mal ngemeldet mhast
Hier mal der string
"XYZ"#"EUR"#"R6LJL"#"100"##"N"#" "###"130"#######"BdLand#"11.03.2009"##"aa"##"6/8"###"Deutschland"#"01.01.2010 07:36:52"#"0084223845"#"08.04.2009"#"ggg"##"Neubau"#"0"##"abc"#"Naugarten"###"bearbeiten"#"Keine Referenz"#"9100122069"#"Am Mühlenberg"##"0,00 €"#"Außen KS"##" "#"10"#"03.04.2009 10:30:00"##" 2 EFH"#"m³"##"Eigenheime"###"cef"#"Angebot"##"abc"#"def"#"17291"#"firma"
"YXZ"#"EUR"#"ED1CB"#"200"##"N"#" "###"500"#######"BDLand"#"18.07.2008"##"aa"##"61-63"###"Deutschland"#"29.05.2009 10:19:11"#####"Neubau"#"0"##"Berlin"####"ijk"#"Keine Referenz"#"9200092391"#"gggh"#"18.07.2008"#"0,00 €"#"Komplett KS"##" "##"16.12.2008 09:00:00"##" 2 Stadtvillen"#"m³"##"Mehrfamilienhäuser"#"2"##"firma2"#"Abgeschlossen"##"abc"#"def"#"13187"#"firma"
"XYZ"#"EUR"#"TBI48"#"300"##"Y"#"*"##########"BundLAnd"#"27.05.2009"##"aat"#####"Deutschland"#"28.01.2010 14:59:44"###"hhh"###"0"##"Regis-Breitingen"####"bearbeiten"#"Keine Referenz"#"9100128787"#"Wildenhain"##"0,00 €"###" "#"10"###" 2009 ggt"#"m³"##"Eigenheime"####"Auftrag"##"abc"#"WEISSK"#"04565"#"firma"
"XYZ"#"EUR"#"QUO8C"#"400"##"N"#" "###"20"#######"BdLand"#"27.02.2009"##"aa"##"6"###"Deutschland"#"11.02.2010 07:00:44"#"0081647112"#"13.11.2009"#"Einfamilienhäuser (EFH)"##"Neubau"#"0"##"aac"####"bearbeiten"#"Keine Referenz"#"9100120816"#"Briloner Weg"##"0,00 €"#"Komplett KS"##" "#"10"###" 2009 efga"#"m³"##"Eigenheime"####"Auftrag"##"abc"#"ddef"#"12207"#"Firma"
gruß wolfgang
Anzeige
Öffnen und Kopieren versus VBA-code
28.02.2010 10:59:51
Ramses
Hallo
Meine Umgebung:
Laptop mit 2 GHz Mobile CPU, 4 GB Arbeitsspeicher und W7 Ultimate 32 Bit mit Office 2007
Hab mal mit den Mustern von dir eine CSV Datei mit 95000 Datensätzen erstellt, Grösse knap 25 MB.
Öffnen der Datei direkt aus Excel und Auftrennen mit Daten - Text in Spalten und dem koperen und einfügen des aufgetrennten Textes in eine neue Datei dauert weniger als 20 Sekunden
Die Gleiche Aktoin mit dem code von Reinhard dauert etwa 5 Minuten.
Vorschlag:
Neuen Rechner kaufen :-)
Gruss Rainer
Anzeige
AW: Öffnen und Kopieren versus VBA-code
28.02.2010 13:26:28
Reinhard
Hallo Rainer,
5 min, eieiei :-(
Okay, dann vergesst den Code halt :-)
Gruß
Reinhard
Tut mir leid....
28.02.2010 14:09:02
Ramses
Hallo Reinhard
Was auffällt er braucht zum einlesen der Datei schon lange, knapp 1.5 Min. Aber der grosse Geschwindigkeitsfresser ist dann das Replace, was bei mir knapp 3 Minuten dauert.
Aber probiers doch einfach mal bei dir aus.
Das Muster der Datensätze hat er ja gezeigt. Ich habe das einfach genommen in Notpad eine CSV-Datei erstellt und dort reinkopiert. "Ctrl"+"V" für 1-2 Minuten und dann mal kucken :-)
Die Datei sollte dann etwa 25 MB haben.
Zur Kontrolle die Datei mit Excel öffnen, dann weisst du wieviel Datensätze in der Datei sind.
Gruss Rainer
Anzeige
AW: Tut mir leid....
28.02.2010 15:14:06
Reinhard
Hallo Rainer,
gibt es was Schnelleres als diese Codezeile um eine Datei einzulesen?
Alles = Input(LOF(1), #1)
Soweit ich weiß sind Stringoperationen immer langsamer als bei Zahlen.
Wenn nun dem Anfrager Split zu langsam ist und Replace genauso, tja nun, kann man wohl nix machen *denk*
Sicher, ich könnte mir so eine große Datei nachbauen, wozu, du hast es doch schon getan.
Der Anfrager sollte eine MsgBox einbauen, "dauert jetzt 3-5 Minuten" und fertig :-)
Gruß
Reinhard
Anzeige
Keine Msgbox...
28.02.2010 17:08:07
Ramses
Hallo Reinhard
"...Der Anfrager sollte eine MsgBox einbauen, "dauert jetzt 3-5 Minuten" und fertig :-).."
Er soll mal mit dem Makrorekorder das öffnen der CSV Datei und das Text-To-Columns direkt aufzeichnen und das umgewandelte Ergebnis dann einfach dorthin kopieren wo nötig.
Dann ist EXCEL nur mit sich selbst beschäftigt :-) und wenns dann immer noch so lange dauert,... einen neuen Rechner oder etwas mehr RAM :-)
"Alles = Input(LOF(1), #1)" liest doch auch nur alles Zeilenweise in das Array ein weil es sonst nicht weiss was es mit dem ganzen Zeug anfangen soll :-)
Ich denke bei Dateien dieser Grösse wird VBA immer langsamer sein als die reinen EXCEL internen C## Code's
Gruss Rainer
Anzeige
AW: Tut mir leid....
01.03.2010 08:44:36
Reinhard
Hallo Rainer,
okay, ich habe eine ähnlich große csv. So 130.000 Zeilen, 24 MB.
Scheinbar ist Notepad schneller als Vba-Open beim Einlesen.
Ca. 10 sec und Notepad ist weg und Alles und A() sind befüllt.
Die untere Prozedur fand ich bei Hans, ich komme damit nicht so klar. Aber geht ja auch ohne.
Option Explicit
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const WAIT_TIMEOUT = &H102&
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAcess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Sub Einlesen()
' Verweis auf MS Forms 2.0 muß gesetzt sein wegen Dataobject
Dim A() As String, Alles$, MyData As New DataObject, Zei As Long, Anz As Integer, NP
On Error GoTo Hell
Application.ScreenUpdating = False
Application.SendKeys "^a^c%db"
NP = Shell("NotePad.exe c:\test\sehrgross.csv", vbMaximizedFocus)
MyData.GetFromClipboard
Alles = MyData.GetText(1)
'Application.SendKeys "%db"
'Call WartenBisFertig
A = Split(Alles, Chr(10))
'DoEvents
MsgBox Len(Alles)
MsgBox UBound(A)
Hell:
Application.ScreenUpdating = True
End Sub
Sub WartenBisFertig()
Dim ProcessID As Long, hProcess As Long, RetVal As Long
ProcessID = Shell("NotePad.exe c:\test\sehrgross.csv", vbNormalNoFocus)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID)
Do
DoEvents
RetVal = WaitForSingleObject(hProcess, 50)
Loop Until RetVal  WAIT_TIMEOUT
End Sub

Gruß
Reinhard
Anzeige
AW: VBA + Text in Spalten
28.02.2010 09:23:00
Reinhard
Hallo Wolfgang,
wieso copy und paste?
Wie liest du denn die csv ein?
Zeige mal den ganzen Code fürs Einlesen und Aufsplitten.
Gruß
Reinhard
AW: VBA + Text in Spalten
28.02.2010 10:11:23
Reinhard
Hallo Wolfgang,
teste mal ob dies schneller ist:
Sub Einlesen()
' Verweis auf MS Forms 2.0 muß gesetzt sein wegen Dataobject
Dim Alles$, MyData As New DataObject
On Error GoTo Hell
Application.ScreenUpdating = False
Open "C:\test\kwwolfgang.csv" For Binary As #1
Alles = Input(LOF(1), #1)
Close #1
Alles = Replace(Application.Trim(Replace(Alles, "#", " ")), Chr(34) & " " & Chr(34), Chr(9))
MyData.SetText Alles
MyData.PutInClipboard
With Worksheets("Tabelle1")
.Range("A1").Select
.Paste
'.UsedRange.Columns.AutoFit
End With
Hell:
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
Anzeige
AW: VBA + Text in Spalten
28.02.2010 20:57:37
wolfchen
Hallo Reinhard
sorry das ich jetzt erst Anworte. Dein Ansatz ist wirlich super.
Mein Poblem ist halt das ich nur Office 2003 habe und da ist halt bei Zeile 65536 Schluß.
Einlesen muß ich aber mehrere Textzeilen
Ich mach das in dem ich die Daten dann in das nächste Arbeitsblatt schreibe.
Genau hier ist das Problem. Ich muß dann von sheet1 bis sheetx die Daten trennen.
Leider geht es nicht anders da die User nur Excel haben.
Aber Dein Ansatz ist wirklich sehr gut
Das Skript habe ich getestet.
Mit PutInClipboard
geht das wirklich sehr schnell
gruß wolfgang
Anzeige
Es ist doch zum in die Luft gehen...
28.02.2010 21:36:08
Ramses
Hallo
Das war deine ursprüngliche Frage
"...mit Screenupdating hab ichs schon probiert es sind halt 65000 zeilen und 30 spalten..."
Und jetzt kommt so eine Aussage:
"...und da ist halt bei Zeile 65536 Schluß. Einlesen muß ich aber mehrere Textzeilen
Ich mach das in dem ich die Daten dann in das nächste Arbeitsblatt schreibe...."
Würde mich interessieren WIE du die Daten dann in das nächste Arbeitsblatt schreibst
By the Way: Mit .PutInClipboard kommst du da dann auch nicht weiter.
Gruss Rainer
Anzeige
AW: Es ist doch zum in die Luft gehen...
01.03.2010 20:24:02
wolfgang
Hallo Rainer
Sorry vielleicht habe ich mich auch falsch ausgedrückt.
Die Textdatei lese ich mit Line Input in Excel ein
Schreibe die Zeile mit cells(i,1) ins erste Arbeitsblatt
bin ich in Zeile 60000 bzw 130000 springe ich ins nächste Arbeitsblatt,
setzte i wieder auf 2 und lese weiter mit Cells(i,1) ein
klappt auch ganz gut und geht auch verhältnismäßig schnell.
Danach wird die Spalte selektiert und mit Selection.TextToColumns
trenne ich die Strings. Und genau hier ist der Zeitfresser.
Darum mein Ansatz mit PutInClipboard. also die Idee war die Spalte Kopieren und dann wieder mit Paste
einfügen.
Wenn ich das mit einer Textdatei mache trennt Excel manchmal ja auch in Zellen.
Ich weiß nur nicht warum und wann das Excel mit Textdateien macht.
gruß wolfgang
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Effektive Nutzung von VBA für Text in Spalten in Excel


Schritt-für-Schritt-Anleitung

Um Text in Spalten mithilfe von VBA effektiv zu bearbeiten, kannst Du die folgende Schritt-für-Schritt-Anleitung nutzen:

  1. Öffne Excel und gehe zu den Entwicklertools.

  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub TextInSpalten()
        Application.ScreenUpdating = False
        Dim rng As Range
        Set rng = Columns(2) 'Wähle die Spalte, die bearbeitet werden soll
        rng.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
                         TextQualifier:=xlDoubleQuote, OtherChar:="#"
        Application.ScreenUpdating = True
    End Sub
  4. Führe das Makro aus:

    • Drücke F5 oder gehe zu Ausführen.

Dieser Code trennt den Text in der zweiten Spalte nach dem Charakter #. Du kannst das Zeichen nach Bedarf anpassen.


Häufige Fehler und Lösungen

Fehler 1: Das Makro läuft sehr langsam.

Lösung: Setze Application.ScreenUpdating = False am Anfang und Application.ScreenUpdating = True am Ende des Codes. Dies reduziert die Zeit, die für das Aktualisieren des Excel-Fensters benötigt wird.

Fehler 2: Excel trennt den Text nicht wie erwartet.

Lösung: Überprüfe, ob der TextQualifier korrekt eingestellt ist. Der Wert xlDoubleQuote sollte verwendet werden, wenn Deine Textdaten in doppelten Anführungszeichen stehen.


Alternative Methoden

Wenn Du die Standardfunktion von Excel verwenden möchtest, um Text in Spalten zu trennen, kannst Du auch folgende Methode anwenden:

  1. Wähle die Spalte aus, die Du trennen möchtest.
  2. Gehe zu Daten > Text in Spalten.
  3. Wähle Getrennt und klicke auf Weiter.
  4. Setze das Trennzeichen auf # und klicke auf Fertig stellen.

Diese Methode ist effektiv, benötigt aber manuelle Eingaben und kann bei großen Datenmengen langsamer sein.


Praktische Beispiele

Ein praktisches Beispiel für den VBA-Code könnte so aussehen:

Sub BeispielTextInSpalten()
    Dim zeilenNummer As Long
    zeilenNummer = 65000 ' Beispiel für eine große Datenmenge
    Dim i As Long
    For i = 1 To zeilenNummer
        Cells(i, 1) = "Beispiel" & "#" & "Text" & "#" & "Daten"
    Next i
    Call TextInSpalten 'Aufruf der oben definierten Subroutine
End Sub

In diesem Beispiel werden 65.000 Zeilen mit Beispieltext gefüllt, der dann durch die TextInSpalten-Subroutine getrennt wird.


Tipps für Profis

  • Verwende Arrays: Um die Verarbeitungsgeschwindigkeit zu erhöhen, kannst Du die Daten in ein Array einlesen, bearbeiten und dann zurück in das Arbeitsblatt schreiben.

  • Vermeide Copy-Paste: Statt vba sendkeys ctrl+c zu verwenden, solltest Du die Daten direkt in die Zellen schreiben, um die Geschwindigkeit zu erhöhen.

  • Teste die Performance: Führe Tests durch, um die schnellste Methode für Deine spezifischen Daten zu ermitteln. Bei großen Dateien kann das Einlesen mit Input(LOF(1), #1) effektiver sein.


FAQ: Häufige Fragen

1. Wie kann ich Text in Spalten rückgängig machen? Um die Text in Spalten-Funktion rückgängig zu machen, kannst Du einfach Strg + Z drücken, solange Du die Aktion nicht gespeichert hast.

2. Welche Excel-Version benötige ich für VBA? Die oben genannten VBA-Codes sollten in Excel 2007 und höher funktionieren. Bei älteren Versionen wie 2003 können einige Funktionen eingeschränkt sein.

3. Was ist ein Textqualifier und wie wird er verwendet? Ein Textqualifier ist ein Zeichen, das verwendet wird, um den Anfang und das Ende eines Textes zu kennzeichnen. In VBA wird TextQualifier:=xlDoubleQuote verwendet, um sicherzustellen, dass Text in Anführungszeichen korrekt behandelt wird.

4. Wie kann ich die Leistung bei großen Dateien verbessern? Setze Application.ScreenUpdating auf False, um die Anzeige während der Verarbeitung zu deaktivieren, und arbeite mit Arrays, um die Daten schneller zu verarbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige