Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1304to1308
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

Split - Funktion?

Split - Funktion?
28.03.2013 10:53:28
Peter
Hallo zusammen,
ich habe gestern schon gefragt und jetzt einige Sachen ausprobiert, komme allerdings einfach nicht weiter. Scheinbar verstehe ich die Spilt-Funktion nicht richtig!
Vereinfachte Musterdatei:
https://www.herber.de/bbs/user/84567.xls
Ich suche nach den Blöcken, die ich auch finde, und lass mir alle Daten dazu in dem nächsten Sheet ausgeben. Der Schritt, der noch fehlt, ist jetzt in der Musterdatei. Die Strings in den Blöcken möchte ich beim "/" teilen und in die passende Spalte schreiben, etwa so:
dim var as variant, b as variant, n as integer
var = Split(Cells(i, k), "/")
For n = LBound(var) To UBound(var)
b(n) = var(n)
Next n
belegt.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Value = b(1)
belegt.Cells(Rows.Count, "D").End(xlUp).Offset(1, 0).Value = b(2)
belegt.Cells(Rows.Count, "F").End(xlUp).Offset(1, 0).Value = b(3)
Es endet mit einem Laufzeitfehler. Wo ist mein Denkfehler?
Bitte helft mir!
Viele Grüße
Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Split - Funktion?
28.03.2013 12:14:17
Sheldon
Hallo Peter,
es ist immer hilfreich, auch den Link auf den Thread mitzuliefern, wenn du dich auf ihn beziehst.
Dein Codeschnipsel wirft Fragen auf. Dimensioniert sind die Variablen var, b und n. Im Code benutzt Du aber gleich in der ersten Zeile auch die Variablen i und k. Woher kommen die, bzw. welche Werte enthalten sie?
Warum kopierst Du den Inhalt des var-Arrays 1:1 in b? Zumal das so nicht funktionieren wird, weil b ja noch gar nicht als Array definiert ist, bisher ist das einfach eine leere Variant-Variable.
Und dann nutzt du offenbar ein Objekt belegt, um irgendwie auf Zellen darin zuzugreifen. Wo wurde das definiert, müsste ja dann ein Objekt sein, das ein Worksheet darstellt.
Der Befehl ".Cells(Rows.Count, "B") kann nicht funktionieren, statt "B" wird dort eine Zahl, in dem Fall 2, erwartet.
Zur eigentlichen Ausgangsfrage: Du schreibst, du findest bereits die Blöcke, die nun aufzuteilen sind. In der Musterdatei fehlt aber dieser funktionierende Codeteil. Also können wir Helfer auch nirgends ansetzen. Bau doch mal den funktionierenden Codeteil ein, dann sehen wir weiter…
Gruß
Sheldon

Anzeige
AW: @Sheldon
28.03.2013 12:20:08
hary
Hallo Sheldon
Zitat
"Der Befehl ".Cells(Rows.Count, "B") kann nicht funktionieren, statt "B" wird dort eine Zahl, in dem Fall 2, erwartet."
Stimmt nicht.;-) VBA wandelt das "B" selbstaendig in die 2 um.
gruss hary

AW: @Sheldon
28.03.2013 12:26:06
Sheldon
Hallo hary,
Ok, an der Stelle verhält sich VBA großzügig. Danke für den Hinweis, es bleibt mir nur noch, den belehrenden Zeigefinger zu erheben und darauf hinzuweisen, dass die Angabe "B" kein guter Programmierstil ist, weil solche Dinge an vielen Stellen zu Problemen führen könnten, weil ja leider nicht jede Funktion sowas umformt.
Gruß
Sheldon

Anzeige
AW: @Sheldon
28.03.2013 12:57:43
hary
Hallo Sheldon
War auch keine Kritik. Frueher wusste ich es auch nicht besser Bsp.: was fuer eine Spaltennummer hat AL.
Nu mach ich's mit:
Dim a As String
a = Application.InputBox("Spaltenbuchstabe eingeben", "Spaltenbuchstabe umwandeln")
MsgBox Range(a & 1).Column

gruss hary

AW: @Sheldon
28.03.2013 13:48:57
Sheldon
Hi hary,
sehr elegant! Aber ich hatte das auch gar nicht als Kritik verstanden. So habe ich ja was neues lernen können und jeder zukünftige Leser hat diese Chance auch.
Gruß + schöne Ostertage
Sheldon

AW: Split - Funktion?
28.03.2013 13:00:15
fcs
Hallo Peter,
du hättest ja ruhig die Frage von gester fortsetzen können. Du musst dann nur darauf achten, dass du bei deiner weiteren Frage/Anwort deine Frage ggf. noch ofen setzt (Kästchen ankreuzen).
bei den per Split erzeugten Arrays hat das 1. Element immer den Index-Zähler 0.
Wie bereits von Scheldon erwähnt, musst du die Werte nicht auf ein 2. Array umschreiben.
In der Summe sollte es etwa wie folgt aussehen.
Beim Start des Makros muss das Blatt mit den Ausgangsdaten das aktive Blatt sein oder du musst die Objektvariable wksQ entsprechend setzen.
Gruß
Franz
Sub Test()
Dim belegt As Worksheet, Zeile As Long
Dim wksQ As Worksheet
Dim i As Long, k As Long, dauer As Long
Dim var As Variant
Set wksQ = ActiveSheet 'Tabellenblatt mit den Ausgangsdaten
Set belegt = Worksheets("Tabelle2") 'Zieltabelle
With belegt
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
With wksQ
For i = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row
For k = 2 To .UsedRange.Columns.Count
If .Cells(i, k)  "" Then
var = Split(.Cells(i, k), "/")
Zeile = Zeile + 1
'Zeile - vom Eintrag, den er findet
belegt.Cells(Zeile, 1).Value = i 'Zeile des Eintrags
'Nummer - 1. aus dem String
belegt.Cells(Zeile, 2).Value = var(0) 'Spalte B
'Haus - Wert aus Spalte A
belegt.Cells(Zeile, 3).Value = wksQ.Cells(i, 1)
'Anrede - 2. aus String
belegt.Cells(Zeile, 4).Value = var(1)
'Name - 3. aus String
belegt.Cells(Zeile, 5).Value = var(2)
'Vorname - 4. aus String
belegt.Cells(Zeile, 6).Value = var(3)
'Anf. - von wann
belegt.Cells(Zeile, 7).Value = wksQ.Cells(2, k).Value
'Ende - bis wann
If .Cells(i, k).MergeArea.Address = .Cells(i, k).Address Then
dauer = 1
Else
dauer = .Cells(i, k).MergeArea.Areas(1).Columns.Count
End If
belegt.Cells(Zeile, 8).Value = wksQ.Cells(2, k + dauer - 1).Value
'zug. Monat - welcher Monat, hier nur Beispielmonat Jan 2013
belegt.Cells(Zeile, 9).Value = _
"'" & wksQ.Cells(1, k).MergeArea.Cells(1, 1).Text
'sonstiges - 5. aus String
belegt.Cells(Zeile, 10).Value = var(4)
End If
Next k
Next i
End With
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige