VBA: Split-Funktion mit einem Trennzeichen?
Hallo zusammen,
ich stehe vor einem Problem, woran ich schon seit Tagen arbeite und keine Lösung finde.
Meine Split-Funktion klappt soweit, die Daten werden eingefügt. Allerdings in der ersten der ersten Zeile von (D). Ich benötige die Daten aber ab Zeile (D20) und das bekomme ich nicht hin.
Hat bitte jemand einen Lösungsvorschlag, da ich nicht so fit mit VBA bin?
Dim MeinArray() As String
Dim MeineZeichenkette As String
Dim I As Variant
Dim N As Integer
Dim WB As Worksheet
Set WB = ThisWorkbook.Sheets("Abrechnung")
Dim WBlerf As Worksheet
Set WBlerf = ThisWorkbook.Sheets("Tabelle1")
Ziel = WBlerf.Range("D20")
'Beispielzeichenkette mit Semikolon als Trennzeichen
MeineZeichenkette = WB.Range("Aufmaß_srvpos")
'Die Funktion Split verwenden, um die Bestandteile der Zeichenkette aufzuteilen
MeinArray = Split(MeineZeichenkette, ";")
'Das Arbeitsblatt leeren
'ActiveSheet.UsedRange.Clear
'Durch das Array iterieren
For N = LBound(MeinArray) + 0 To UBound(MeinArray)
'Jede E-Mail-Adresse in die erste Spalte des Arbeitsblatts einfügen
WBlerf.Range("D" & N + 1).Value = MeinArray(N)
Next N
Lieben Dank und VG
Stefan
3 Antworten
Dein "N" geht von 0 bis zur Länge des Array. Annahme 7.
Also beschreibst du Zelle D1 bis D7
Da du aber von D20 an schreiben willst musst du einen Offset einbauen
const Offset = 20
WBlerf.Range("D" & N + Offset).Value = MeinArray(N)
Gibt es einen Grund, warum du das nicht mit einer kurzen Tabellenfunktion machst?
In D20:
=MTRANS(TEXTTEILEN(Aufmaß_srvpos;";"))
WBlerf.Range("D" & N + 1).Value = MeinArray(N)
Hier benutzt du dein Ziel nicht. Entweder du definierst dein Ziel als Integer (Zeilennummer), dann bräuchtest du hier nur schreiben
WBlerf.Range("D" & Ziel + N).Value = MeinArray(N)
Oder du arbeitest mit Offset (ungetestet):
Ziel.Offset(N).Value = MeinArray(N)
Wenn du die Variante mit Ziel als Integer benutzen willst, musst du Ziel noch mit 20 initialisieren, damit VBA weiß, dass es bei D20 losgeht (sonst versucht das Programm den Wert nach D0 zu schreiben, was den Fehler erzeugt)
Für die andere Variante muss Ziel ein Range sein und du musst es mit Set Ziel zuweisen:
Sub test()
Dim Ziel As Range
Set Ziel = [D20]
Dim Woerter() As String
Woerter = Split([Aufmaß_srvpos], ";")
Dim Offset As Integer
Offset = 0
Dim Wort As Variant
For Each Wort In Woerter
Ziel.Offset(Offset).Value = Wort
Offset = Offset + 1
Next Wort
End Sub
Wobei, wie ich in meiner Antwort schon geschrieben hab: Wenn nichts besonderes dagegen spricht, würde ich es eher mit der kurzen Tabellenfunktion in der Zelle D20 machen:
=MTRANS(TEXTTEILEN(Aufmaß_srvpos;";"))
Excel erkennt automatisch, dass das eine Matrixformel ist und füllt die Felder entsprechend. Dafür müssen sie aber vorher leer sein, sonst kommt nur der Fehler #ÜBERLAUF.
Das hat außerdem den Vorteil, dass du die Datei problemlos per E-Mail versenden kannst, weil sie keine Makros enthält.
Hallo Suboptimierer,
Vielen Dank für Deine Antwort, beides versucht bringt aber immer Fehler :-( heul..
WBlerf.Range("D" & Ziel + N).Value = MeinArray(N) = Fehler 1004
Ziel.Offset(N).Value = MeinArray(N) = Fehler "ungültiger Bezeichner"
Hatte Dim Ziel As Integer eingefügt aber klappt nicht.
Ist das so richtig?
Grüße Stefan