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

in Array schreiben ohne Schleife

in Array schreiben ohne Schleife
26.04.2016 17:08:29
Frank
Hallo zusammen.
Ich habe in einem Excelsheet drei NICHT zusammenhängende, benannte Bereiche (RANGE1, RANGE2, RANGE3). Die drei Ranges haben jeweils vier Zeilen.
Ich habe in VBA ein Array deklariert: Dim test(1 To 3, 1 To 4).
Wie bekomme ich die Daten der einzelnen Ranges in das Array geschaufelt OHNE eine Schleife zu verwenden. Mir schwebt eine direkte Zuweisung vor wie
test(1, 1 to 4) = RANGE1
test(2, 1 to 4) = RANGE2
Hat jemand eine Idee?
Vielen Dank,
Frank

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

Betreff
Datum
Anwender
Anzeige
Nachtrag: die drei Ranges haben je eine Spalte
26.04.2016 17:09:55
Frank
.

AW: in Array schreiben ohne Schleife
26.04.2016 17:14:23
Rudi
Hallo,
Sub aaa()
Dim test(1 To 3)
test(1) = [Range1]
test(2) = [Range2]
test(3) = [Range3]
End Sub
Allerdings enthalten die 3 Elemente dann wiederum Arrays (Test(1)(1 to 4, 1 to 1))
Gruß
Rudi

AW: in Array schreiben ohne Schleife
26.04.2016 17:57:12
Frank
Schonmal danke, Rudi.
Vom "Aufbau" her sollte das Array am End so sein, als würde ich einen zusammenhängenden Bereich mit drei Spalten und vier Zeilen direkt zuweisen:
test = Range("A1:C4")

AW: in Array schreiben ohne Schleife
26.04.2016 17:30:26
Daniel
Hi
es kommt darauf an, wie du mit dem Array Test weiter arbeiten willst.
die einfachste Möglichkeit Schleifen zu vermeiden wäre, dass du das Array Test als eindimensionales Array auslegst und dann jedem Index statt eines einfachen Wertes ein weiteres Array (mit den Werten aus den Ranges zuweist:
dim Test(1 to 3)
Test(1) = Range1.Value
Test(2) = Range2.Value
Test(3) = Range3.Value
wenn du dann einen Wert abfragen willst, dann so:
Debug.Print Test(1)(3, 1)

sieht etwas komisch aus, liegt aber daran, dass jeder wert des Arrays Test wiederum ein zweidimensionales Array mit einer Spalte und 4 Zeilen ist.
wenn du Test als echtes 2-D-Array haben willst, dann so:
Dim test
Redim test(1 to 3)
test(1) = Worksheetfunction.Transpose(Range1.value)
test(2) = Worksheetfunction.Transpose(Range2.value)
test(3) = Worksheetfunction.Transpose(Range3.value)
test = Worksheetfunction.Transpose(test)
debug.print test(1, 3)
beim Transponieren der Ranges entsteht ein eindimensionales Array, da die Range aus einer Spalte besteht)
dann hängst du diese eindimenionalesn Arrays wiederum als Werte in das eindimensionale Array test ein.
beim Transponieren des Gesamtarrays macht VBA dann aus diesem 1+1-Dimensionalen Array ein echtes zweidimensionales Array, das funktioniert aber nur, wenn die Ranges alle gleich gross sind.
Gruß Daniel

Anzeige
AW: in Array schreiben ohne Schleife
26.04.2016 18:00:10
Frank
Hallo Daniel, das klingt vielversprechend. Werde es morgen gleich austesten. Hab leider kein Excel daheim, nur auf Arbeit.
Vom Aufbau her sollte das am Ende ein Array sein wie, wenn ich einen zusammenhängenden Bereich direkt einer Variablen zuordne:
test = Range("A1:C4")....
Klingt so, als würde die Variante mit Transpose exakt das liefern...
Danke,
Frank

AW: in Array schreiben ohne Schleife
27.04.2016 07:27:26
Frank
Hi Daniel,
es funktioniert! Bin begesitert!
Vielen Dank,
Frank

Eine Frage noch...
27.04.2016 07:35:48
Frank
Warum mußt Du bei der 2-D-Variante Redim statt Dim benutzen?

AW: Eine Frage noch...
27.04.2016 08:58:40
Daniel
wenn ich bei einem Array die Anzahl der Dimensionen und deren Größe schon bei DIM festlege, sind diese dauerhaft so festgeschrieben und können im Makro dann nicht mehr verändert werden.
diese Veränderung ist hier aber notwendig, da das Array Test zu beginn ein eindimensionales Array mit 3 Elementen ist, welches dann zu einem zweidimensionalen Array mit 12 Elementen in 4 Zeilen und 3 Spalten gewandelt wird.
also legt man das Array bei Dim zunächst mal als Variant an und redimt dann auf die benötigte Grösse.
Gruß Daniel

Anzeige
AW: Eine Frage noch...
27.04.2016 11:38:45
Frank
alles klar. nochmals herzlichen dank für die hilfe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige