Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1840to1844
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Split

VBA - Split
27.07.2021 16:18:54
excelliebe
Hallo zusammen,
ich erhalte bei folgendem Code einen Laufzeitfehler bei
  • Cells(2, letzteSpalte + 1) = Trennen(i)

  • Ich suche dabei zunächst nach der Spalte mit der Überschrift "Bezeichnung". In der nächsten freien Spalte sollen dann die ersten 11 Buchstaben des Values in der Spalte Bezeichnung stehen. Im Anschluss möchte ich diese trennen nach dem Bindestrich "Trennzeichen", sodass aus einer Spalte drei werden.

  • 
    Sub TextInSpalten()
    Application.ScreenUpdating = False
    'Dimensionen
    Dim letzteZeile As Range
    Dim letzteSpalte As Long
    Dim SpalteBez As Range
    Dim lastrow As Long
    Dim Trennen() As String
    'Variablen definieren
    letztZeile = Sheets("Name").Cells(Rows.Count, "A").End(xlUp).Row
    letzteSpalte = Sheets("Name").Cells(1, Sheets("Name").Columns.Count).End(xlToLeft).Column
    lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    'Formel LINKS & TextInSpalten
    With Worksheets("Name")
    Set SpalteBez = .Rows(1).Find(what:="Bezeichnung", LookIn:=xlValues, lookat:=xlWhole)
    Set rng1 = .Range(.Cells(2, letzteSpalte), .Cells(letztZeile, letzteSpalte))
    Dim i As Long
    For i = 1 To lastrow
    Cells(i, letzteSpalte + 1).Value = Left(Cells(i, SpalteBez.Column).Value, 11)
    Next
    Dim j As Integer
    Dim Text As String
    Text = Cells(i, letzteSpalte).Value
    Trennen = Split("Text", "-")
    For j = 1 To lastrow
    Cells(2, letzteSpalte + 1) = Trennen(i)
    Next
    End With
    Application.ScreenUpdating = True
    End Sub
    

  • Kann jemand helfen?

    7
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA - Split
    27.07.2021 16:45:22
    Yal
    Hallo XL,
    wie wär's mit
    
    For i = 1 To lastrow
    
    anstatt
    
    For j = 1 To lastrow
    
    ?
    VG
    Yal
    AW: VBA - Split
    27.07.2021 16:53:06
    Zwenn
    Hallo,
    ich habe nicht den ganzen Code nachvollzogen, aber mit
    
    For j = 1 To lastrow
    Cells(2, letzteSpalte + 1) = Trennen(i)
    Next
    
    schreibst Du immer in die gleiche Zelle und zwar immer nur das letzte Elment des Arrays, sofern es eins mit dem Index gibt, den lastrow definiert.
    Zusätzlich fehlt vor Cells(... vermutlich auch ein Punkt, sonst mach With Worksheets("Name") nicht wirklich Sinn.
    Viele Grüße,
    Zwenn
    Anzeige
    AW: VBA - Split
    27.07.2021 17:01:00
    Zwenn
    Ah,
    Du hast oben im Modul nicht Option Explicit stehen. IMMER verwenden, um zur Deklaration von Variablen gezwungen zu sein.
    Deine deklarierte Variable heißt letzteZeile
    Du verwendest dann aber letztZeile
    rng1 ist gar nicht deklariert
    AW: VBA - Split
    27.07.2021 16:57:49
    Daniel
    Hi
    Der grundsätzliche Fehler dürfte sein, dass du hier Trennen = Split("Text", "-") nicht die Variable Text splittest, sondern den Text "Text".
    Der enthält aber das Trennzeichen nicht, und somit hat das Array nur einen Index.
    Merke: Variablen dürfen nicht innerhalb von Anführungszeichen stehen.
    Aber auch das folgende ist als Code völliger Blödsinn:
    
    For j = 1 To lastrow
    Cells(2, letzteSpalte + 1) = Trennen(i)
    Next
    
    Das fängt schon mal damit an, dass der Schleifenzähler j in der Schleife nicht vorkommt und somit die Schleife überflüssig ist, da der exakt gleiche Vorgang mehrfach wiederholt wird und einmal reicht!
    Auch wenn man annimmt, dass du die Schleifenzähler j und i verwechselst hast, ist die Schleife Unsinn dass weil du immer die gleiche Zelle überschreibst.
    Bei schleifen über ein Array sollte man sich Start- und Endwert immer aus dem Array holen, um Fehler zu vermeiden:
    
    For j = LBound(trennen) to ubound(trennen)
    
    Wobei man anstelle des LBound oft einfach nur den festen Wert einsetzt, weil die Untergrenze in der Regel bekannt ist.
    Beachte, dass durch Split erstellte Arrays mit dem Index 0 beginnen und nicht mit 1.
    Startet du mit 1, wird der erste Wert dieses Arrays übersprungen.
    Gruß Daniel
    Anzeige
    AW: VBA - Split
    27.07.2021 18:04:01
    excelliebe
    Mega - Vielen Dank für die ausführliche Erklärung! Das hiflt mir sehr viel :)
    AW: VBA - Split
    27.07.2021 17:44:51
    Yal
    Hallo XL,
    wenn ich es richtig verstehe,
    _ die Bezeichnungspalte wird in Zeile 1 ermittelt
    _ erste freie Spalte wird ermittelt (letzte Spalte +1)
    _ für alle Einträge aus der Bezeichnungsspalte (eigentlich ab Zeile 2, da die erste Überschrift ist):
    _ die erste 11 Zeichen der Inhalt der Zelle in die erste frei Spalte ablegen
    _ die erste 11 Zeichen nach "-" splitten und die Einzelteile in die nächsten Spalten rechts ablegen
    
    Sub TextInSpalten()
    'nicht "Dimensionen" sonder Variable-Deklaration. In Extras, Optionen.. setze "Variablendeklaration erforderlich" ein ("Option Explicit")
    'alle Deklarationen zusammen am Anfang. NICHTS anderes davor!
    Dim BezSpalte As Long 'warum einmal SpalteBez und einmal LetzteSpalte. Entweder Name-Vorname oder umgekehrt, aber dann konsequent
    Dim LetzteSpalte as Long
    'Wenn du nicht international arbeitest, dann alle variablen auf deutsch
    'es macht die Unterscheidung zwischen native VBA-Code und eigenen Beitrag leichter
    Dim Trennen
    Dim i As Long
    Dim j As Long
    Dim Text As String
    Application.ScreenUpdating = False
    'Formel LINKS & TextInSpalten
    With Worksheets("Name") 'es findet alles in "Name", nichts mit "ActiveSheet"!
    'Variablen nicht "definieren" sondern "initialisieren" ("definieren" = "Deklaration")
    LetzteSpalte = .Range("XFD1").End(xlToLeft).Column
    BezSpalte = .Rows(1).Find(what:="Bezeichnung", LookIn:=xlValues, lookat:=xlWhole).Column
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row 'ab Zeile 2, da erste Überschrift!
    Text = Trim(Left(Cells(i, BezSpalte).Value, 11))
    Cells(i, LetzteSpalte + 1).Value = Text
    Trennen = Split(Text, "-")
    For j = LBound(Trennen) To UBound(Trennen)
    'Die "letzte Spalte", die Du hier meinst, ist vermutlich die "neue letzte Spalte", da Du eine neue befüllt hast
    Cells(i, LetzteSpalte + 2 + j) = Trennen(j)
    Next
    Next
    End With
    Application.ScreenUpdating = True
    End Sub
    
    VG
    Yal
    Anzeige
    AW: VBA - Split
    27.07.2021 18:04:33
    excelliebe
    Wow, danke für die Hilfe! Die Kommentare sind super :)

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige