ich benötige eure Hilfe. Ich beginne derzeit, mich aufgrund der deutlich besseren Performance, mich mit Arrays zu beschäftigen und lese und youtube viel.
Anbei habe ich ein Problem, welches ich nicht gelöst bekomme. Ich habe Daten in F6, die ich in ein Array einlese und dann eigentlich um eine Spalte innerhalb des Arrays erweitern möchte, um Daten hinzuzufügen. Das Problem im Anhang ist nur ein Zwischenziel, ab da möchte ich dann selbst erstmal weitertüfteln.
Ich verstehe nicht, wieso mein Array beim Einlesen der Daten in der zweiten Dimension immer auf 2 geschrumpft wird - ich dimensioniere es doch auf 3. Entsprechend erscheint immer ein Fehler, wenn ich anschließend Daten hinzufügen möchte. Mit dem Redim Preserve-Befehl habe ich schon rumprobiert - da komme ich allerdings auch nicht weiter.
Ich hoffe, ihr könnt mir nicht nur die Lösung, sondern vll auch einen Denkanstoß liefern.
31.08.2022, 13:24 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2022, 13:25 von Klaus-Dieter.)
Hallo,
mir scheint du hast ein falsches Verständnis von den Dimensionen eines Array. Du brauchst nur ein zweidimensionales Array. Es hat 19 "Zeilen" und 3 "Spalten". Zum besseren Verständnis habe ich dir das mal anhand deines Wunschergebnisses dargestellt:
Wenn du daraus die richtigen Schlüsse ziehst, wirst du merken, dass du das befüllen nicht mit deiner Methode machen kannst. Jetzt muss ich noch mal weg, wenn sich bis dahin niemand eingeklinkt hat, können wir das vertiefen, wenn ich zurück bin.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
31.08.2022, 18:36 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2022, 18:51 von Klaus-Dieter.)
Hallo EasY,
habe dein Makro mal so geändert, das es funktioniert:
Code:
Option Explicit
Sub arra() Dim arr(19, 2) As Variant Dim i As Long For i = 0 To 18 arr(i, 0) = Cells(i + 6, 6) arr(i, 1) = Cells(i + 6, 7) Select Case arr(i, 1) Case "HA" arr(i, 2) = 1 Case "GH" arr(i, 2) = 2 Case "X", "x" arr(i, 2) = 3 Case "TH" arr(i, 2) = 5 Case "" arr(i, 2) = 6 Case "BH" arr(i, 2) = 7 End Select Next i ActiveSheet.Range("J6:L" & UBound(arr) + 4) = arr End Sub
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
31.08.2022, 18:37 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2022, 18:38 von EasY.)
Hey hey
@snb Danke für den Hinweis bezüglich des Namens - das werde ich ändern. Ansonsten verstehe ich dein Makro (wie so oft) nicht. Das, was du hier immer ablieferst ist echt abgefahren, Hut ab!
@klaus-dieter Danke auch dir für deine Ausführungen. Die Dimensionen habe ich tatsächlich verstanden. Dass das Array bei der Befüllmethode schrumpft und nicht geeignet ist, wusste ich nicht. Welche Methode für das Szenario gäbe es denn dann noch? Eine for-next-schleife würde die Geschwindigkeit wieder drosseln. Oder ginge es so wie snb geschrieben hat so, dass ich beim festlegen der currentregion den Bereich gleich um eine Spalte vergrößere? Kann gerade nicht testen - bin auf Arbeit :)
Edit: jetzt warst du schneller. Ich schaue mir dein Makro nachher zu Hause an und teste.