Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Text in Spalten - Makro

Text in Spalten - Makro
16.04.2014 08:41:39
Detlef
Hallo,
ich will die Spalte L mit "Text in Spalten" mit dem Marko aufzeichnen. Allerdings funktioniert mein Makro nicht. Wenn ich diesen ausführe passiert nichts. Sobald ich wieder Text in Spalten manuell ausführen funktioniert es.
Hier mein Code:
Range("L6:L10000").Select
Selection.TextToColumns Destination:=Range("B6"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 4), TrailingMinusNumbers:=True
In Spalte L steht ein Datum + Uhrzeit, der allerdings erst nach dem Text in Splaten korrekt formatiert wird.
Könnt ihr mir helfen was ich hier falsch mache?
LG

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
funktioniert ...
16.04.2014 09:14:13
Matthias
Hallo
Zitat:

Allerdings funktioniert mein Makro nicht.
Kann ich nicht bestätigen, das Makro wird korrekt ausgeführt.
Hinweis zu:
 Range("L6:L10000").Select
Selection.TextToColumns ...
Select muss nicht sein, du kannst es auch so schreiben:
Range("L6:L10000").TextToColumns Destination:=Range("B6"), ...
Gruß Matthias

Anzeige
AW: funktioniert ...
16.04.2014 09:27:18
Detlef
Nein leider nicht. Guck mal in meiner Beispieldatei:
https://www.herber.de/bbs/user/90186.xlsm
Wenn man es manuell ausführt, dann stehen die Daten "rechtsbündig". Wenn es per Makro gestartet wird dann passiert nicht.
Um die Daten nachher auszuwerten müssen diese "rechtsbündig" stehen, also richtig formatiert. Die Daten werden aus einem SQL in Excel ausgelesen.

Anzeige
AW: funktioniert ...
16.04.2014 09:35:13
Philipp
Hallo Detlef,
nimm doch sowas hier:
Public Sub convertToDate()
Dim rngDates As Range
Dim rngCell As Range
Set rngDates = Range("L6:L10000")
For Each rngCell In rngDates
rngCell = CDate(rngCell)
Next rngCell
End Sub
Gruß
Philipp

Anzeige
AW: funktioniert ...
16.04.2014 09:40:33
Detlef
Das klappt ja wunderbar. Kann man das auch dynamisch machen?
Also es sind nicht immer 10000 Zeilen vorhanden. Manchmal auch nur 200.
Kann es iwie so hinbekommen, dass VBA es automatisch erkennt wann die letzte zeile aufhört?
LG

AW: funktioniert ...
16.04.2014 09:45:52
Philipp
Hallo Detlef,
das kann man auch. Vorne folgendes einfügen.
Dim lngLastRow As Long
lngLastRow = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
Set rngDates = Range("L6:L" & lngLastRow)
Es ist halt immer die Frage wie/wann genau der code ausgeführt wird.
Gruß
Philipp

Anzeige
AW: funktioniert ...
16.04.2014 09:59:14
Detlef
Danke, das klappt!
Allerdings wird die Exceldatei von einem Server aus gestartet und dort dauert die Formatierung sehr sehr lange. Gibt es noch eine möglichkeit dies zu beschleunigen? Evtl das er im Vorfeld sie gesamte Spalte markiert und dann formatiert und nicht jede Zeile einzelnd?

Anzeige
AW: funktioniert ...
16.04.2014 11:17:53
Philipp
Hallo Detlef,
wenn das so häppchenweise kommt, haben wir hier deutlich mehr Arbeit.
Soweit ich das sehe, funktioniert die Konvertierung nicht über einen Bereich, daher nehm ich die Lösung mit *1 als Vorlage und einer Hilfsspalte (Spalte ALL), wo die Formel mal kurz reinkommt und dann später die Inhalte wieder zurück in Spalte L.
Schau mal, ob das so passt und schneller ist.
Die Spalten und Startzeile sind flexibel. Einfach oben anpassen, falls irgendwas nicht passt.
Public Sub convertToDate()
Dim rngDates As Range
Dim rngCopyDates As Range
Dim lngLastRow As Long
Dim lngSrcCol As Long: lngSrcCol = 12
Dim lngCopyCol As Long: lngCopyCol = 1000
Dim lngStartingRow As Long: lngStartingRow = 6
lngLastRow = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
With ActiveSheet
Set rngDates = .Range(.Cells(lngStartingRow, lngSrcCol), .Cells(lngLastRow, lngSrcCol))
Set rngCopyDates = .Range(.Cells(lngStartingRow, lngCopyCol), .Cells(lngLastRow,  _
lngCopyCol))
End With
rngCopyDates.FormulaR1C1 = "=RC" & lngSrcCol & " * 1"
rngDates.FormulaR1C1 = rngCopyDates.Value
rngCopyDates.ClearContents
End Sub
Gruß
Philipp

Anzeige
AW: funktioniert ...
16.04.2014 13:00:08
Detlef
Super, vielen Dank!

ohne Makro ...
16.04.2014 09:42:07
Matthias
Hallo
Schreib in eine leere Zelle eine 1
Diese kopierst Du
Jetzt markierst Du Deinen Bereich und wählst

  • Inhalte einfügen

  • Multiplizieren

  • ok


Das wars schon
Gruß Matthias

Anzeige
AW: ohne Makro ...
16.04.2014 09:45:31
Detlef
Da gefällt mir Phillips Lösung besser. Allerdings brauche ich es dynamisch.
Dein Vorschlag könnte man auch als Makro aufzeichnen, allerdings habe ich auch hier das Problem das es nicht dynamisch ist.

warum schreibst Du das dann nicht gleich ?
16.04.2014 09:53:28
Matthias
Hallo
Du wolltest doch ursprünglich Daten Text in Spalten benutzen
Da kann man z.B. auch das Datum für die entsprechende(n) Spalte(n) einstellen!
Userbild
Gruß Matthias

Anzeige
AW: warum schreibst Du das dann nicht gleich ?
16.04.2014 09:57:51
Detlef
Das ist richtig, allerdings funktionert es nicht per Makro :-( Warum auch immer!
;

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

Text in Spalten mit VBA optimieren


Schritt-für-Schritt-Anleitung

Um die Funktion Text in Spalten mit einem Makro in Excel VBA zu automatisieren, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor mit ALT + F11.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Kopiere den folgenden Code in das Modul:

    Public Sub TextInSpalten()
        Dim lngLastRow As Long
        lngLastRow = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
        Range("L6:L" & lngLastRow).TextToColumns Destination:=Range("B6"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 4), _
            TrailingMinusNumbers:=True
    End Sub
  4. Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

Problem: Das Makro führt keine Änderungen durch und die Funktion "Text in Spalten" funktioniert nicht.

Lösung: Stelle sicher, dass du den Select-Befehl vermeidest. Nutze stattdessen den direkten Zugriff auf den Bereich, wie im obigen Beispiel gezeigt.

Problem: Daten erscheinen nicht richtig formatiert (z. B. nicht rechtsbündig).

Lösung: Überprüfe, ob die Daten im richtigen Format vorliegen. Du kannst ein zusätzliches Makro hinzufügen, um die Daten nach der Trennung in das Datum-Format zu konvertieren.

Public Sub ConvertToDate()
    Dim rngDates As Range
    Dim rngCell As Range
    Set rngDates = Range("L6:L10000")
    For Each rngCell In rngDates
        rngCell.Value = CDate(rngCell.Value)
    Next rngCell
End Sub

Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch die Funktion Inhalte einfügen nutzen:

  1. Schreibe eine 1 in eine leere Zelle und kopiere sie.
  2. Markiere den gewünschten Bereich in Spalte L.
  3. Wähle Inhalte einfügen und dann Multiplizieren.
  4. Klicke auf OK.

Diese Methode ist einfach, jedoch nicht dynamisch.


Praktische Beispiele

Hier ist ein Beispiel, wie du die letzte Zeile dynamisch ermitteln und die Daten formatieren kannst:

Public Sub DynamischTextInSpalten()
    Dim lngLastRow As Long
    lngLastRow = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
    Range("L6:L" & lngLastRow).TextToColumns Destination:=Range("B6"), DataType:=xlDelimited
    ' Zusätzliches Formatieren, falls nötig
    Dim rngDates As Range
    Set rngDates = Range("L6:L" & lngLastRow)
    For Each rngCell In rngDates
        rngCell.Value = CDate(rngCell.Value)
    Next rngCell
End Sub

Tipps für Profis

  • Vermeide die Verwendung von Select und Selection in deinem VBA-Code. Das macht den Code effizienter und schneller.

  • Wenn du häufig mit großen Datenmengen arbeitest, kannst du die Berechnung in Excel vorübergehend deaktivieren, um die Ausführungsgeschwindigkeit zu erhöhen:

    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Warum funktioniert mein Makro nicht, obwohl ich alles richtig gemacht habe?
Überprüfe, ob du den Select-Befehl verwendet hast. Ersetze ihn durch direkten Zugriff auf den Bereich.

2. Wie kann ich sicherstellen, dass die Daten immer richtig formatiert sind?
Nutze die Funktion CDate in deinem Makro, um sicherzustellen, dass die Daten als Datum interpretiert werden.

3. Gibt es eine Möglichkeit, das Makro zu beschleunigen?
Ja, deaktiviere vorübergehend die Bildschirmaktualisierung und die Berechnung in Excel, um die Geschwindigkeit zu erhöhen.

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