Microsoft Excel

Herbers Excel/VBA-Archiv

Vba: Array dynamisch dimensionieren und einfügen


Betrifft: Vba: Array dynamisch dimensionieren und einfügen von: Christian
Geschrieben am: 30.09.2019 16:50:40

Grüßt euch,

Ich habe noch einige Verständnisprobleme bei der Funktion .rezise.

Ich möchte einen mit Daten befüllten Array, in mein Tabellenblatt einfügen.
Da der Array seine Größe dynamisch ändert, muss sich dementsprechend auch der Ausgabebereich vergrößern.

Der Code funktioniert soweit auch, ich muss nur bisher immer händisch die letzte Zahl im . rezise Befehl anpassen.


Renditen.Range(Renditen.Cells(6, (letzteSpaltestartNeu + 2)), Renditen.Cells(UBound(X, 1), (letzteSpaltestartNeu + 2))).Resize(UBound(X, 1), 3) = X


bisher habe ich die Spalte (im obigen Beispielcode, die 3 am Ende) händisch angepasst. Dies soll aber dynamisch passieren.

die Zeilengröße passt sich ja über die Ubound funktion dynamisch an.
Wie mach ich das nun mit der Spaltengröße?

Vielen Dank für eure Hilfe.

Grüße

Christian.

  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Daniel
Geschrieben am: 30.09.2019 17:02:42

Hi
schau mal nach, was Ubound(..., 1) bedeutet.
wenns ein 1 gibt, gibt's vermutlich auch einen anderen Wert, den man hier einsetzen könnte, in der Regel den benachbarten Wert 0 oder 2.
überlege mal, was es in einem 2-dimensionalen Array alles gibt und wofür dann dieser andere Wert in der UBound-Funktion stehen könnte.
und wie gesagt, du arbeitest mit 2-dimensionalen Arrays.

und noch ein Tipp: wenn du sowieso die Größe des Zellbereichs mit Resize bestimmst, dann reicht die Angabe der linken oberen Eckzelle aus, weil das .Resize die Größe der Range "überspielt"

Gruß Daniel


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: onur
Geschrieben am: 30.09.2019 17:19:02

" in der Regel den benachbarten Wert 0 " - bist du sicher ?


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Daniel
Geschrieben am: 30.09.2019 17:33:24

omg. ist ja nur ein Beispiel, um zum selbst ausprobieren und Experimentieren anzuregen.
da darf man auch mal testen, was passiert wenn man einen unpassenden Wert vorgibt.
Gibt ja auch die Variante WAHR und FALSCH, die dann 1 und 0 sind, wenn man wegen der kürzeren Schreibweise mit Zahlenwerten arbeitet.
und 0 ist von 1 genauso ein Nachbar wie 2, nur halt nicht rechts, sondern links.
so what.
Gruß Daniel


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Christian
Geschrieben am: 30.09.2019 17:38:54

Hi onur und Daniel,

Renditen.Range(Renditen.Cells(6, (letzteSpaltestartNeu + 2)), Renditen.Cells(UBound(X, 1), (letzteSpaltestartNeu + 2))).Resize(UBound(X, 1), UBound(X, 2)) = X

mein Code habe ich nun so geschrieben. Könnte man diesen noch vereinfachen?

Das funktioniert.
Danke für eure "Anregungen". Ich denke so langsam komme ich hinter die Array Eigenschaften :D:D.


Grüße Christian


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Daniel
Geschrieben am: 30.09.2019 17:45:55

naja, wie ich dir schon schrieb: wenn du die größe des Zellbereichs mit .Resize bestimmst, reicht als Ausgangszellbereich davor die linke obere Eckzelle.


wenn ich beispielsweise den Zellbereich von A1:J10 beschreiben will, nehme ich entweder:
Cells(1, 1).Resize(10, 10) oder Range(Cells(1, 1), Cells(10, 10))
aber
Range(Cells(1, 1), Cells(10, 10)).Resize(10, 10) ist doppeltgemoppelt

wenn ich Start- und Endzeile kenne, nehme ich Range(Cells, Cells)
kenne ich jedoch Startzeile und die Anzahl der benötigten Zeilen, dann Cells.Resize

klaro?

Gruß Daniel


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Christian
Geschrieben am: 30.09.2019 17:48:11

Hi daniel,

hatte dir zu schnell geantwortet.
Nun noch vereinfacht, sieht der Code so aus.

Renditen.Cells(6, (letzteSpaltestartNeu + 2)).Resize(UBound(X, 1), UBound(X, 2)) = X


Funktioniert einwandfrei.

Vielen Dank für die schnelle kompetente Hilfe.

Christian


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Christian
Geschrieben am: 30.09.2019 17:20:52

Hallo Daniel,

"schau mal nach, was Ubound(..., 1) bedeutet." das ist mir klar, dass die 1 oder 2 oder.... die 2. Dimension also die Spaltenanzahl ist.
Nur ich weiß ja zu Beginn nicht, wie viele Spalten der Array haben wird.

Wie meinst du das mit dem "dann reicht die Angabe der linken oberen Eckzelle aus"?
Ich könnte also nur .Resize(Zelle,Spalte der Linken oberen Ecke angeben) ohne Ubound(X,1),3) ?


Für micht ist das verständnis mit den Arrays noch sehr sehr schlecht.
Das ist mein erstes VBA Projekt und allgemein erste Erfahrungen mit Codes.

Grüße Christian


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Christian
Geschrieben am: 30.09.2019 17:27:57

Hallo Daniel,

"schau mal nach, was Ubound(..., 1) bedeutet." das ist mir klar, dass die 1 oder 2 oder.... die 2. Dimension also die Spaltenanzahl ist.
Nur ich weiß ja zu Beginn nicht, wie viele Spalten der Array haben wird.

Wie meinst du das mit dem "dann reicht die Angabe der linken oberen Eckzelle aus"?
Ich könnte also nur .Resize(Zelle,Spalte der Linken oberen Ecke angeben) ohne Ubound(X,1),3) ?


Für micht ist das verständnis mit den Arrays noch sehr sehr schlecht.
Das ist mein erstes VBA Projekt und allgemein erste Erfahrungen mit Codes.

Grüße Christian


  

Betrifft: AW: Vba: Array dynamisch dimensionieren und einfügen von: Daniel
Geschrieben am: 30.09.2019 17:38:03

nein, natürlich mit Ubound.

ich meinte folgendes:

wenn du Schreibst Range("A1:Z1000").Resize(5, 10) bekommst du das gleiche Ergebnis wie mit Range("A1").Resize(5, 10), weil eben das Resize die endgültige Größe vorgibt und von der vorgesetzten Range nur die linke obere Eckzelle verwendet wird.

das Ubound brauchst du natürlich, um die Werte für das Resize zu ermitteln.

mir gings da um das Range(Cells(a, b), Cells(c, d)).Resize(x, y), hier reichet: Cells(a, b).resize(x, y) völlig aus.

Gruß Daniel


Beiträge aus dem Excel-Forum zum Thema "Vba: Array dynamisch dimensionieren und einfügen"