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

Forumthread: Zellinhalt mittels VBA trennen

Zellinhalt mittels VBA trennen
04.02.2016 11:20:23
Mike
Hallo Excel Freunde,
ich bräuchte bei folgender Aufgabe Unterstützung.
In Spalte A (Beginnend mit A2) stehen aus einem csv Export untereinander Daten in genau dieser Schreibweise:
Name,Vorname Gruppe
Über VBA sollte nun eine Spalte rechts eingefügt werden und die Gruppe in Spalte A entfernt und dafür in Spalte B eingefügt werden. Die Lösung muss über VBA und nicht über Formeln erfolgen. Wer kann mir mit dem Code helfen?
Gruß
Mike

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellinhalt mittels VBA trennen
04.02.2016 11:23:55
Bernd
Hi,
einfach mit dem recorder aufgezeichnet s.
Sub test()
' test Makro
Columns("B:B").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A2:A11").Select
Selection.Cut
Range("B2").Select
ActiveSheet.Paste
End Sub
mfg Bernd

Anzeige
AW: Zellinhalt mittels VBA trennen
04.02.2016 11:34:01
Mike
Hallo Bernd,
das Makro fügt den gesamten Inhalt von Spalte A in die eingefügte Spalte B. Ich benötige jedoch eine Trennung des Zellinhaltes, so dass nur der Wert nach dem Lehrraum (Gruppe) übertragen wird.
Gruß
Mike

AW: Zellinhalt mittels VBA trennen
04.02.2016 11:55:00
Oberschlumpf
Hi Mike
Versuch mal (ungetestet, aber ohne Makrorecorder :-) )
Sub test()
Dim lloRow As Long, lstrSplit() As String
For lloRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
lstrSplit = Split(Range("A" & lloRow).Value, " ")
Range("A" & lloRow).Value = lstrSplit(0)
Range("B" & lloRow).Value = lstrSplit(1)
Next
End Sub

Mein Code geht in Spalte A Zeile für Zeile durch.
Der Inhalt in Zelle A... wird in 2 Teile aufgeteilt, das Trennzeichen ist das Leerzeichen
Der erste Teil der Trennung (Name,Vorname) wird in Zelle A... geschrieben
Der zweite Teil der Trennung (Gruppe) wird in Zelle B... geschrieben.
Hilfts?
Ciao
Thorsten

Anzeige
AW: Zellinhalt mittels VBA trennen
04.02.2016 13:25:42
Mike
Hallo Thorsten,
bekomme Laufzeitfehler Index außerhalb des gültigen Bereichts
Range("B" & lloRow).Value = lstrSplit(1)
Gruß Mike

AW: Zellinhalt mittels VBA trennen
04.02.2016 13:35:17
Oberschlumpf
Hi Mike,
in welcher Zeile der Tabelle tritt dieser Fehler auf?
Dieser Fehler weist darauf hin, dass in der entsprechenden Zeile in Spalte A ein Wert steht, der - kein - Leerzeichen enthält.
Daher:
Zeig mal bitte eine Bsp-Datei mit Bsp-Daten und dem VBA-Code....per Upload.
Ciao
Thorsten

Anzeige
AW: Zellinhalt mittels VBA trennen
04.02.2016 13:52:55
Mike
Hallo Thorsten,
ich habe aktuell noch keine Bsp. Datei. Bei Debuggen wird die o. g. Fehler gelb markiert.
Gruß Mat

AW: Zellinhalt mittels VBA trennen
04.02.2016 14:48:20
Oberschlumpf
Hi Mike
Dann erstell doch eine Bsp-Datei...
Ciao
Thorsten

So etwas löst man über Text-in-Spalten, ...
04.02.2016 14:01:29
Luc:-?
…Mike,
was man auch mit dem Makro-Recorder aufzeichnen kann. Außerdem gibt's im Archiv etliche Lösungen mit UDFs*, die in ZellFmln oder SubProzeduren eingesetzt wdn können. Mit deren Ergebnis könnten die beiden Spalten überschrieben wdn.
* VSplit, Splint, Splitt, Trennen u.a.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: So etwas löst man über Text-in-Spalten, ...
04.02.2016 14:12:42
Mike
Hallo Luc,
wie soll ich bitte mit dem Makro-Recorder die Trennung des Zellinhaltes aufzeichnen? Es keine Spalten überschrieben werden, sondern der abgetrennte Wert von Spalte A als Spalte B eingefügt werden.
Gruß Mike

AW: So etwas löst man über Text-in-Spalten, ...
04.02.2016 14:41:20
Daniel
Hi
du kannst bei TEXT-IN-SPALTEN festlegen, welche Spalten eingefügt werden und ab wo das Einfügen erfolgen soll.
Das machst du alles im Schritt 3 des Assistenten.
Gruß Daniel

Anzeige
AW: "Text in Spalten" ist eine native XL-Funktion
04.02.2016 14:42:30
Michael
Mike,
das wollte Dir Luc damit sagen, und die könnte bei Deinem Fall bereits ohne Formel oder Makro die gewünschte Lösung bringen. Die Anwendung der Funktion "Text in Spalten" kannst Du aber auch per Rekorder aufzeichnen.
Die Funktion findest Du im Menüband unter Daten -- Datentools - Text in Spalten. Wähle als Trennzeichen dann das Leerzeichen.
Die Funktion macht das:
Tabelle1

 ABCD
1Ausgangssituation Nach Funktion Text in Spalten 
2    
3Thomas,Müller GruppeA Thomas,MüllerGruppeA
4Jens,Meier GruppeB Jens,MeierGruppeB
5Hans,Husten GruppeA Hans,HustenGruppeA
6Petra,Probe GruppeC Petra,ProbeGruppeC
7Daniel,Düsentrieb GruppeD Daniel,DüsentriebGruppeD
8Max,Muster GruppeA Max,MusterGruppeA
9Tom,Tester Gruppe D Tom,TesterGruppeD
10Paula,Probe GruppeF Paula,ProbeGruppeF
11Elke,Experiment GruppeX Elke,ExperimentGruppeX
12Jemand,Anderer GruppeC Jemand,AndererGruppeC

Lg
Michael

Anzeige
AW: Als Makro dann bspw. so
04.02.2016 14:54:04
Michael
Mike,
was aber nur der geputzte Makro-Rekorder-Code ist:
Sub Trennen()
Dim Liste As Range
Dim Ziel As Range
Dim ws As Worksheet
'Auf dem aktiven Tabellenblatt
Set ws = ActiveSheet
With ws
'Daten von A2 bis zur letzten gefüllten Zelle in A aufteilen
'Daten werden beim Leerzeichen getrennt
Set Liste = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
Liste.TextToColumns Destination:=Liste(1), Space:=True
End With
End Sub
Lg
Michael

Anzeige
AW: Als Makro dann bspw. so
04.02.2016 15:35:27
Mike
Hallo an Alle,
danke für die Antworten.
Das Makro von Michael ist was ich gesucht habe, mit der kleinen Ausnahme, dass die Daten in Spalte B (zwar gefragt) überschrieben werden. Die Spalte mit den Gruppendaten sollte aber zusätzlich eingefügt werden und alle anderen Spalten nach rechts rucken, dann wäre es perfekt.
Lg
Mike

Anzeige
Dann musst du während der Aufzeichnung ...
04.02.2016 15:47:43
Luc:-?
…des Makros eben erst noch eine leere Spalte rechts von der zu behandelnden einfügen, Mike!
Ist das denn wirklich so schwer, wenn man wenigstens in Xl gut sein will…?! :->
Luc :-?

AW: Eigene Anstrengung ist nicht verboten...
04.02.2016 16:26:34
Michael
Mike!
Du hast ja nie Deinen konkreten Tabellenaufbau gezeigt - wer soll dann annehmen, dass in Spalte B schon Daten vorhanden sind. Und wie Luc richtig sagt: Du hast etliche Lösungshinweise bekommen, aber es ist nicht verboten sich dann auch noch selbst die "Hände etwas schmutzig" zu machen ;-)...
Zum "Problem" des Überschreibens von Spalte B: entweder Du fügst vorher eine Spalte ein und löst dann das Makro aus oder geändertes Makro:
Sub Trennen()
Dim Liste As Range
Dim Ziel As Range
Dim ws As Worksheet
'Auf dem aktiven Tabellenblatt
Set ws = ActiveSheet
With ws
'Zusätzliche Spalte
.Columns("B:B").Insert shift:=xlToRight
'Daten von A2 bis zur letzten gefüllten Zelle in A aufteilen
'Daten werden beim Leerzeichen getrennt
Set Liste = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
Liste.TextToColumns Destination:=Liste(1), Space:=True
End With
End Sub
LG
Michael

Anzeige
Bei mir kam dabei zB diese Befehlsfolge ...
04.02.2016 14:48:11
Luc:-?
…heraus. Mike:
    Range("F7:F9").Select
Selection.TextToColumns Destination:=Range("F7"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Viel Erfolg!
Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
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

Zellinhalt mit VBA trennen


Schritt-für-Schritt-Anleitung

Um den Zellinhalt in Excel mittels VBA zu trennen, gehe folgendermaßen vor:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Einfügen eines neuen Moduls:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. VBA-Code einfügen:

    • Kopiere den folgenden Code und füge ihn in das Modul ein:
    Sub Trennen()
       Dim Liste As Range
       Dim ws As Worksheet
       'Auf dem aktiven Tabellenblatt
       Set ws = ActiveSheet
       With ws
           'Zusätzliche Spalte einfügen
           .Columns("B:B").Insert Shift:=xlToRight
           'Daten von A2 bis zur letzten gefüllten Zelle in A aufteilen
           Set Liste = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
           Liste.TextToColumns Destination:=Liste(1), Space:=True
       End With
    End Sub
  4. Ausführen des Codes:

    • Schließe den VBA-Editor und kehre zu Excel zurück.
    • Drücke ALT + F8, wähle Trennen und klicke auf Ausführen.

Dieser Code trennt die Inhalte in Spalte A nach Leerzeichen und fügt die Ergebnisse in Spalte B ein.


Häufige Fehler und Lösungen

  • Laufzeitfehler „Index außerhalb des gültigen Bereichs“:

    • Dieser Fehler tritt auf, wenn in einer Zelle kein Leerzeichen vorhanden ist. Stelle sicher, dass alle Zellen in Spalte A ein Leerzeichen enthalten.
  • Daten werden überschrieben:

    • Achte darauf, dass du eine neue Spalte einfügst, bevor du das Makro ausführst. Der Code fügt automatisch eine Spalte ein und trennt die Werte.

Alternative Methoden

  1. Text in Spalten Funktion:

    • Eine einfache Methode, um Zellinhalte zu trennen, ist die Verwendung der Funktion „Text in Spalten“:
      • Wähle die Zellen in Spalte A aus.
      • Gehe zu Daten > Datenwerkzeuge > Text in Spalten.
      • Wähle „Getrennt“ und dann „Leerzeichen“ als Trennzeichen.
  2. Excel-Formeln:

    • Du kannst auch Formeln wie LINKS() und RECHTS() verwenden, um Inhalte zu extrahieren, jedoch ist dies weniger effizient als die Verwendung von VBA.

Praktische Beispiele

Angenommen, in Spalte A stehen folgende Daten:

Thomas,Müller GruppeA
Jens,Meier GruppeB
Hans,Husten GruppeA

Nach Ausführung des Makros wird Spalte A wie folgt aussehen:

Thomas,Müller
Jens,Meier
Hans,Husten

Und Spalte B:

GruppeA
GruppeB
GruppeA

Tipps für Profis

  • Anpassung des Codes: Du kannst den Code modifizieren, um andere Trennzeichen zu verwenden, z.B. Semikolon. Ändere die Zeile Liste.TextToColumns Destination:=Liste(1), Space:=True zu Liste.TextToColumns Destination:=Liste(1), Semicolon:=True.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinen VBA-Code, um Laufzeitfehler elegant zu handhaben. Nutze On Error Resume Next, um den Code robuster zu machen.


FAQ: Häufige Fragen

1. Wie kann ich die Daten nach einem anderen Trennzeichen als Leerzeichen trennen? Du kannst das Trennzeichen im VBA-Code anpassen, indem du Space:=True durch Comma:=True oder Semicolon:=True ersetzt.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, solange du Zugriff auf den VBA-Editor hast.

3. Was soll ich tun, wenn ich eine große Datenmenge habe? Wenn du mit umfangreichen Daten arbeitest, teste den Code zuerst an einer kleinen Datenprobe, um sicherzustellen, dass alles korrekt funktioniert.

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