Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: dynamische Array-Größe in VBA

dynamische Array-Größe in VBA
23.05.2008 16:16:21
Jana
Hallo liebes Forum!!
Wie kann die Größe eines Arrays abhängig von der Größe zweiten Arrays initialisieren?
Bsp.: ich habe folgendes Array 1 dynamisch in VBA initialisiert:
Array_1=Range(Cells(2,1),Cells(Row.Count,4).end(xlUp))
Dieses passt sich automatisch an gefüllte Zellen an.
Nun wollte ich ein zweites Array initialisieren aber ich weiß nicht genau, wie ich es an die dynamische Größe des Array_1 anpassen kann.
Vielen Dank für eure Hilfe!!
Gruß Jana

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ARRAY auf RANGE bezogen ist immer 2-dimensional
23.05.2008 16:36:05
NoNet
Hallo Jana,
eins vorweg : ein ARRAY, das sich auf einen RANGE bezieht, ist immer 2-dimensional (Zeilen, Spalten), daher muss man unterscheiden, WELCHE Dimension dynamisch ist.
Schau Dir z.B. folgenden Code an :
VBA-Code:
Sub ArrayDynamisieren()
    Dim Arr1, Arr2
    'Arr1 = [A1].Resize(Cells(Rows.Count, 1).End(xlUp).Row)
    Arr1 = Range(Cells(2, 1), Cells(Rows.Count, 4).End(xlUp))
    'Hier wird die 2.ARRAY-Variable dynamisch redimensioniert
    'Es richtet sich nach der Anzahl der ersten Dimension (Zeilen) des ersten ARRAYS :
    ReDim Arr2(UBound(Arr1))
End Sub
Weitere Infos zu diesem Thema findest Du in diesem Thread aus dem Spotlight-Archiv :
http://spotlight-wissen.de/archiv/message/1442456.html
Viel Erfolg, Gruß NoNet

Anzeige
Ergänzung: Auch nicht range-bezogene...
23.05.2008 16:47:52
Luc:-?
...Spaltenvektoren sind immer 2dimensional, Jana!
1dimensional können nur nicht range-bezogene (also aus Ausdrücken resultierende) Zeilenvektoren sein.
Gruß+sWE!
Luc :-?
PS: Auch im Herber-Archiv findet man dazu etliche Ausführungen... ;-)

Anzeige
AW: ARRAY auf RANGE bezogen ist immer 2-dimensional
23.05.2008 16:56:41
Jana
Hallo NoNet!!
Vielen Dank!!
Hat wunderbar geklappt. Habe es mit dem "Ubound" gemacht, da ich nur eine Dimension dynamisch brauche.
Viel Grüße Jana
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Array-Größe in VBA


Schritt-für-Schritt-Anleitung

  1. Dynamisches Array initialisieren: Du kannst ein dynamisches Array in VBA einfach mit ReDim definieren. Beispiel:

    Dim Arr1() As Variant
    ReDim Arr1(1 To 10) ' Erstellt ein Array mit 10 Elementen
  2. Größe eines Arrays ermitteln: Um die Größe eines bestehenden Arrays zu ermitteln, nutzt du die Funktion UBound. Beispiel:

    Dim size As Long
    size = UBound(Arr1) ' Gibt die obere Grenze des Arrays zurück
  3. Dynamische Größe anpassen: Um ein zweites Array an die Größe des ersten anzupassen, kannst du folgendes tun:

    Dim Arr2() As Variant
    ReDim Arr2(1 To UBound(Arr1)) ' Anpassung an die Größe von Arr1
  4. Daten in das Array einfügen: Fülle die Arrays mit den gewünschten Daten, z.B. aus einem Excel-Bereich:

    Arr1 = Range(Cells(2, 1), Cells(Rows.Count, 4).End(xlUp))

Häufige Fehler und Lösungen

  • Problem: "Fehler beim Versuch, die Größe des Arrays zu ändern."

    • Lösung: Stelle sicher, dass das Array initialisiert wurde, bevor du ReDim verwendest. Verwende Dim oder ReDim Preserve, um die Werte zu behalten.
  • Problem: "Array ist immer 2-dimensional, wenn es sich auf einen Range bezieht."

    • Lösung: Beachte, dass ein Array, das sich auf einen Range bezieht, immer 2-dimensional ist. Wenn du nur eine Dimension benötigst, verwende UBound entsprechend.

Alternative Methoden

  • Array of Arrays: Du kannst auch ein Array von Arrays in VBA definieren:

    Dim MultiArray() As Variant
    Dim i As Long
    ReDim MultiArray(1 To 5) ' Erstellt ein Array mit 5 Elementen
    For i = 1 To 5
      ReDim MultiArray(i)(1 To 10) ' Jedes Element ist ein weiteres Array
    Next i
  • Verwendung eines VBA Containers: Wenn du eine flexible Größe benötigst, ziehe in Betracht, einen VBA Container wie Collection oder Dictionary zu verwenden.


Praktische Beispiele

  • Beispiel für ein einfaches dynamisches Array:

    Sub BeispielDynamischesArray()
      Dim Daten() As Variant
      Dim i As Long
      ReDim Daten(1 To 5)
    
      For i = 1 To 5
          Daten(i) = "Wert " & i
      Next i
    End Sub
  • Beispiel für das Ermitteln der Größe eines Arrays:

    Sub ArrayGroesseErmitteln()
      Dim Arr() As Variant
      Dim Groesse As Long
      ReDim Arr(1 To 10)
      Groesse = UBound(Arr) ' Groesse = 10
    End Sub

Tipps für Profis

  • Nutze ReDim Preserve, um die bestehenden Werte in einem Array beizubehalten, wenn du dessen Größe änderst:

    ReDim Preserve Arr1(1 To 20) ' Ändert die Größe, behält die Werte
  • Bei der Arbeit mit dynamischen Arrays solltest du immer die UBound-Funktion verwenden, um sicherzustellen, dass du die Größe korrekt ermittelst und anpasst.


FAQ: Häufige Fragen

1. Wie definiere ich ein dynamisches Array in VBA?
Ein dynamisches Array wird mit Dim und ReDim definiert, z.B.:

Dim Arr() As Variant
ReDim Arr(1 To 10)

2. Wie kann ich die Größe eines Arrays in VBA ermitteln?
Verwende die UBound-Funktion, um die obere Grenze eines Arrays zu erhalten:

Dim size As Long
size = UBound(Arr)

3. Was ist der Unterschied zwischen einem 1-dimensionalen und einem 2-dimensionalen Array?
Ein 1-dimensionales Array hat nur eine Reihe von Werten, während ein 2-dimensionales Array Zeilen und Spalten enthält, z.B. für Daten aus einem Excel-Bereich.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige