Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1904to1908
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 Array Probleme beim Befüllen

VBA Array Probleme beim Befüllen
09.11.2022 10:13:16
Koob,
Hallo zusammen,
ich habe ein Problem mit dem Befüllen meines Arrays. In dem Tabellenblatt "Quelle" habe ich folgende Daten:
Spalte 1 Spalte 2 Spalte 3 Spalte 4
Haupt 01.01.2022 01.01.2022
Text1 01.01.2022 01.01.2023 Test1
Text2 01.01.2022 31.03.2023 Test2; Test3
Erwartet wird, dass im Tabellenblatt "Ziel" es so aussieht:
Haupt 01.01.2022 01.01.2022 Haupt
Text1 01.01.2022 01.01.2023 Text1
Text1 01.01.2022 01.01.2023 Test1
Text2 01.01.2022 31.03.2023 Text2
Text2 01.01.2022 31.03.2023 Test2
Text2 01.01.2022 31.03.2023 Test3 -> Der Eintrag fehlt, den benötige ich auch
Hier der Code:

Sheets("Ziel").Cells.Clear
Do While Sheets("Quelle").Cells(Hauptzaehler, 1)  ""
If Sheets("Quelle").Cells(Hauptzaehler, 4) = "" Then 'Falls Zelle leer, dann wird das Array mit (0) initialisiert
ReDim arrDaten(0)
arrDaten(0) = Sheets("Quelle").Cells(Hauptzaehler, 1)
Else
arrDaten = Array((Sheets("Quelle").Cells(Hauptzaehler, 1)), Split(Sheets("Quelle").Cells(Hauptzaehler, 4), ";")) 'Array wird mit Daten aus der 4. Spalte der Quelle gefüllt, vorher nach Semikolon gesplittet
End If
If IsEmpty(arrDaten) Then 'Ermittlung wieviele Einträge im Array zum Verarbeiten vorhanden sind
anzDaten = 0
Else
anzDaten = UBound(arrDaten) - LBound(arrDaten) + 1
End If
'Zweite Schleife wird so oft durchlaufen wie Einträge im Array pro Zeile vorhanden sind
For i = 1 To anzDaten
Sheets("Ziel").Cells(Nebenzaehler, 1) = Sheets("Quelle").Cells(Hauptzaehler, 1)
Sheets("Ziel").Cells(Nebenzaehler, 2) = Sheets("Quelle").Cells(Hauptzaehler, 2)
Sheets("Ziel").Cells(Nebenzaehler, 3) = Sheets("Quelle").Cells(Hauptzaehler, 3)
Sheets("Ziel").Cells(Nebenzaehler, 4) = arrDaten(arrZaehler)
Nebenzaehler = Nebenzaehler + 1 'Nebenzähler wird für die zweite Schleife genutzt und hochgezählt
arrZaehler = arrZaehler + 1 'Array wird hochgezählt um nächsten Eintrag zu verarbeiten im nächsten Schleifendurchlauf
aktZeileZiel = Nebenzaehler 'Merken der letzten Zeile, die im Ziel gefüllt wurde
Next i
Hauptzaehler = Hauptzaehler + 1
Nebenzaehler = aktZeileZiel
arrZaehler = 0
Loop
Bitte um Hilfe und danke :)

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Array Probleme beim Befüllen
09.11.2022 10:17:34
snb
Zeig mal bitte eine Beispieldatei.
AW: VBA Array Probleme beim Befüllen
09.11.2022 10:40:55
peterk
Hallo

'Zweite Schleife wird so oft durchlaufen wie Einträge im Array pro Zeile vorhanden sind
For i = 1 To anzDaten
If IsArray(arrdaten(arrZaehler)) Then
For j = 0 To UBound(arrdaten(arrZaehler))
Sheets("Ziel").Cells(Nebenzaehler, 1) = Sheets("Quelle").Cells(hauptzaehler, 1)
Sheets("Ziel").Cells(Nebenzaehler, 2) = Sheets("Quelle").Cells(hauptzaehler, 2)
Sheets("Ziel").Cells(Nebenzaehler, 3) = Sheets("Quelle").Cells(hauptzaehler, 3)
Sheets("Ziel").Cells(Nebenzaehler, 4) = arrdaten(arrZaehler)(j)
Nebenzaehler = Nebenzaehler + 1 'Nebenzähler wird für die zweite Schleife genutzt und hochgezählt
aktZeileZiel = Nebenzaehler 'Merken der letzten Zeile, die im Ziel gefüllt wurde
Next j
arrZaehler = arrZaehler + 1 'Array wird hochgezählt um nächsten Eintrag zu verarbeiten im nächsten Schleifendurchlauf
Else
Sheets("Ziel").Cells(Nebenzaehler, 1) = Sheets("Quelle").Cells(hauptzaehler, 1)
Sheets("Ziel").Cells(Nebenzaehler, 2) = Sheets("Quelle").Cells(hauptzaehler, 2)
Sheets("Ziel").Cells(Nebenzaehler, 3) = Sheets("Quelle").Cells(hauptzaehler, 3)
Sheets("Ziel").Cells(Nebenzaehler, 4) = arrdaten(arrZaehler)
Nebenzaehler = Nebenzaehler + 1 'Nebenzähler wird für die zweite Schleife genutzt und hochgezählt
arrZaehler = arrZaehler + 1 'Array wird hochgezählt um nächsten Eintrag zu verarbeiten im nächsten Schleifendurchlauf
aktZeileZiel = Nebenzaehler 'Merken der letzten Zeile, die im Ziel gefüllt wurde
End If
Next i
Peter
Anzeige
AW: VBA Array Probleme beim Befüllen
09.11.2022 10:45:30
Koob,
Hallo Peter,
danke für den Code, wenn ich meine Schleife durch deine ersetze bekomme ich folgenden Fehler:
Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs
Kannst du noch einmal schauen? Und was war mein Denkfehler, warum es bei mir nicht klappt?
Danke :)
AW: VBA Array Probleme beim Befüllen
09.11.2022 13:08:30
snb
Einfach so:

Sub M_snb()
sn = Tabelle1.Cells(1).CurrentRegion.Resize(100)
y = Tabelle1.Cells(1).CurrentRegion.Rows.Count
n = y + 1
For j = 1 To y
If sn(j, 4) = "" Then
sn(j, 4) = sn(j, 1)
Else
st = Split(sn(j, 4), "; ")
sn(j, 4) = sn(j, 1)
For jj = 0 To UBound(st)
sn(n, 1) = sn(j, 1)
sn(n, 2) = sn(j, 2)
sn(n, 3) = sn(j, 3)
sn(n, 4) = st(jj)
n = n + 1
Next
End If
Next
Tabelle2.Cells(1).Resize(UBound(sn), 4) = sn
End Sub

Anzeige
AW: VBA Array Probleme beim Befüllen
09.11.2022 13:16:05
Koob,
Danke schaue es mir an :)
AW: VBA Array Probleme beim Befüllen
09.11.2022 13:49:55
Daniel
Hi
damit du was lernst:
du hast in deinem Code folgenden Denkfehler in dieser Zeile

arrDaten = Array((Sheets("Quelle").Cells(Hauptzaehler, 1)), Split(Sheets("Quelle").Cells(Hauptzaehler, 4), ";"))
du erwartest, dass der Code:

Array("AAA", Split("BBB;CCC", ";"))
ein normales Arrray mit drei Einträgen ergibt, also im Prinzip Array("AAA"; "BBB", "CCC"), damit du Überschrift und Untertexte in ein und der selben Schleife abarbeiten kannst.
Das funktioniert aber nicht, denn du bekommst hier als Ergebnis ein Array, das immer zwei Einträge hat, bei dem der erste Eintrag ein Wert und der zweite Eintrag ein weiteres Array ist, welches dann die weitern Werte enthält, also Array("AAA", Array("BBB", "CCC"))
bzw anders geschrieben, du bekommst nicht

Array(0) = "AAA"
Array(1) = "BBB"
Array(2) = "CCC"
sondern

Array(0) = "AAA"
Array(1) = Array("BBB", "CCC"
bzw

Array(0) = "AAA"
Array(1)(0) = "BBB"
Array(1)(1) = "CCC")
du solltest also den Überschriftenteil nicht integrieren, sondern eigenständig hinzufügen zur Ergebnistabelle hinzufügen und die Schleife nur über die Teiltexte der Spalte 4 laufen lassen.
hier aber noch eine ganz andere lösungsmöglichkeit, in welcher das Ergebnis zuerst in einer Textvariable Stück für Stück zusammengesetzt wird.
das Aufteilen in Zeilen erfolgt dann über Split und das Aufteilen in Spalten ganz am Schluss mit TEXT IN SPALTEN.
diese Herangehensweise ist ganz praktisch, weil man sich nicht mit irgenwelchen Zählern herumschlagen muss.

Sub Semikolon_Splitter_Eustache2()
Dim ErgTxt As String
Dim ErgArr As Variant
Dim Zelle As Range
Dim txt1 As String
Dim txt2 As String
Dim txt
For Each Zelle In Sheets("Quelle").Columns(1).SpecialCells(xlCellTypeConstants, 2).Cells
txt1 =vbLF & Zelle.Offset(0, 0) & "|" & Zelle.Offset(0, 1) & "|" & Zelle.Offset(0, 2) & "|"
txt2 = Zelle.Offset(0, 3).Value
ErgTxt = ErgTxt  & txt1 & Zelle.Value
If txt2  "" Then
For Each txt In Split(txt2, "; ")
ErgTxt = ErgTxt & txt1 & txt
Next
End If
Next
ErgArr = Split(Mid(ErgTxt, 2), vbLf)
With Sheets("Ziel")
.Cells.Clear
.Cells(1, 1).Resize(UBound(ErgArr) + 1).Value = WorksheetFunction.Transpose(ErgArr)
.Columns(1).TextToColumns Destination:=.Cells(1, 1), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=False, Space:=False, _
Other:=True, OtherChar:="|", _
FieldInfo:=Array(Array(1, 1), Array(2, 4), Array(3, 4), Array(4, 1)), _
TrailingMinusNumbers:=True
End With
End Sub
Gruß Daniel
Anzeige
AW: VBA Array Probleme beim Befüllen
09.11.2022 13:53:04
Koob,
genial danke jetzt habe ich es verstanden klasse :)

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige