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

dynamisches mehrdimensionales array

Forumthread: dynamisches mehrdimensionales array

dynamisches mehrdimensionales array
29.07.2002 09:47:29
Michael
Hallo,

wie kann ich ein zweidimensionales Array dynamisch erstellen?
ich möchte gerne während der Laufzeit die Größe beider Dimensionen verändern, wobei die Feldinhalte erhalten bleiben sollen.
Ist so etwas in VBA möglich???

Vielen Dank im voraus!!!

Michael


Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: dynamisches mehrdimensionales array
29.07.2002 09:53:00
Thomas Risi
Hallo Michael

Schau mal in der Online-Hilfe unter 'ReDim' nach. Dort findest Du alle Informationen, die Du benötigst.


Gruß

Thomas

Risi Thomas Softwareentwicklung
Thomas.Risi@t-online.de


Anzeige
Re: dynamisches mehrdimensionales array
29.07.2002 09:56:08
Hans W. Herber
Hallo Michael,

Du kannst nur die letzte Dimension des Arrays verändern.

Beispiel:

hans

Re: dynamisches mehrdimensionales array
29.07.2002 10:13:37
Nepunuk
Morgen Michael
habe ein ähnliches Problem wie folgt gelöst. Ich benutze 3 eindimensionale Arrays die ich bei jedem Neueintrag mit REDIM PRESERVE um eine Stelle erweitere. Am Ende des Suchlaufes wird ein viertes Array in der entsprechenden Größe dimensioniert und in einer Schleife die Werte der Einzelarrays übertragen.
Gruß
Nepumuk
Anzeige
Re: dynamisches mehrdimensionales array
29.07.2002 10:22:59
Michael
Schade,
ich hab' mir schon sowas gedacht...

Vielleicht kannst Du mir ja trotzdem helfen?
Ich möchte Daten eines zweidimensionalen Arrays mit Write #1 in eine Textdatei schreiben und mit Read #1 wieder einlesen.

Ich könnte ja vor dem Wiedereinlesen dieser Datei dieses Array mit ReDim initialisieren.

Dafür müsste ich aber vorher beim Schreiben in die Datei eine Gößenangabe über die Anzahl der 1. und 2. Dimension hinzufügen.

Wie könnte ich das anstellen?
Diese "Größenangabe" müsste als Erstes ausgelesen werden und beim Zurückschreiben aktualisiert werden.

Danke!!!
Michael

Anzeige
Re: dynamisches mehrdimensionales array
29.07.2002 10:26:00
Hans W. Herber
Hallo Michael,

Arrays haben in Excel nicht die Bedeutung wie in anderen Programmiersprachen, da Excel-Tabellen an sich ja schon Arrays darstellen. Es ist vielfach einfacher, Werte in (möglicherweise temporäre) Tabellen ein- und auszulesen, also Arrays zu programmieren. Wenn es um Public-Array-Variablen geht, ist diese Vorgehensweise sowieso zu empfehlen.

hans

Anzeige
Re: dynamisches mehrdimensionales array
29.07.2002 11:04:52
Michael
Super!
daraus lässt sich was basteln...
Danke!!!

Michael

Danke
29.07.2002 11:11:34
Michael
Ich glaub' jetzt hab' ich eine Lösung.

Danke an alle für die Hilfe!!!

Michael

;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Dynamisches mehrdimensionales Array in VBA


Schritt-für-Schritt-Anleitung

Um ein dynamisches mehrdimensionales Array in VBA zu erstellen und dessen Größe während der Laufzeit zu ändern, kannst du die ReDim-Anweisung verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Array initialisieren:

    Dim myArray() As Variant
    ReDim myArray(1 To 2, 1 To 2) ' Zuerst mit 2x2 Dimensionen
  2. Werte zuweisen:

    myArray(1, 1) = "Wert1"
    myArray(1, 2) = "Wert2"
    myArray(2, 1) = "Wert3"
    myArray(2, 2) = "Wert4"
  3. Array vergrößern und Werte behalten:

    ReDim Preserve myArray(1 To 3, 1 To 3) ' Größer machen auf 3x3
    myArray(3, 3) = "Wert5" 
  4. Werte ausgeben:

    For i = 1 To 3
       For j = 1 To 3
           Debug.Print myArray(i, j)
       Next j
    Next i

Mit dieser Methode kannst du ein dynamisches Array in VBA erstellen und bei Bedarf die Dimensionen anpassen, ohne die vorhandenen Werte zu verlieren.


Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"

    • Lösung: Überprüfe, ob die Indizes innerhalb der festgelegten Grenzen liegen. Stelle sicher, dass du das Array mit ReDim korrekt dimensionierst.
  • Fehler: "Type mismatch"

    • Lösung: Achte darauf, dass die Datentypen der zuweisbaren Werte mit dem Typ des Arrays übereinstimmen.
  • Fehler beim Verwenden von ReDim Preserve

    • Lösung: ReDim Preserve kann nur für die letzte Dimension eines mehrdimensionalen Arrays verwendet werden. Wenn du die erste Dimension ändern möchtest, musst du das Array neu erstellen und die Werte manuell übertragen.

Alternative Methoden

Falls du Schwierigkeiten mit einem mehrdimensionalen Array hast, könntest du auch folgende Methoden in Betracht ziehen:

  • Eindimensionale Arrays: Nutze mehrere eindimensionale Arrays und verwalte sie in einer Sammlung oder einem Dictionary. Dies kann manchmal einfacher sein, insbesondere wenn die Anzahl der Dimensionen dynamisch ist.

  • Excel-Tabellen: Du kannst die Daten auch direkt in Excel-Tabellen verwalten. Viele Operationen, die du mit einem Array durchführen möchtest, lassen sich einfacher mit Excel-Tabellen umsetzen.


Praktische Beispiele

Hier sind einige Beispiele, die zeigen, wie man ein dynamisches Array in VBA verwenden kann:

  1. Daten aus einer Excel-Tabelle in ein mehrdimensionales Array füllen:

    Dim dataRange As Range
    Set dataRange = ThisWorkbook.Sheets("Tabelle1").Range("A1:B10")
    Dim dataArray() As Variant
    dataArray = dataRange.Value ' Füllt das Array mit Werten aus der Tabelle
  2. Schreiben eines mehrdimensionalen Arrays in eine Textdatei:

    Dim fileNum As Integer
    fileNum = FreeFile
    Open "C:\Pfad\zu\deiner\datei.txt" For Output As #fileNum
    For i = LBound(myArray, 1) To UBound(myArray, 1)
       For j = LBound(myArray, 2) To UBound(myArray, 2)
           Print #fileNum, myArray(i, j);
       Next j
       Print #fileNum, ' Neue Zeile
    Next i
    Close #fileNum

Tipps für Profis

  • Nutze Option Base 1 am Anfang deines Moduls, um die Indizes deines Arrays bei 1 beginnen zu lassen. Dies kann für die Lesbarkeit und Konsistenz deiner VBA-Programme hilfreich sein.

  • Halte die Array-Größen in Variablen oder Konstanten, um die Wartbarkeit deines Codes zu erhöhen.

  • Überlege, ob du Redim Preserve wirklich benötigst. Es kann die Performance beeinträchtigen, wenn es häufig verwendet wird. Manchmal ist es effizienter, ein neues Array zu erstellen und die Werte manuell zu übertragen.


FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array in VBA initialisieren? Um ein mehrdimensionales Array zu initialisieren, verwendest du die ReDim-Anweisung. Beispiel: ReDim myArray(1 To 2, 1 To 2).

2. Kann ich mit ReDim Preserve die Größe des gesamten Arrays ändern? Nein, ReDim Preserve ermöglicht nur das Ändern der letzten Dimension eines mehrdimensionalen Arrays. Für andere Dimensionen musst du das Array neu erstellen.

3. Wie kann ich Daten aus einem mehrdimensionalen Array in eine Textdatei schreiben? Verwende die Open, Print und Close Anweisungen, um die Daten in eine Datei zu schreiben. Stelle sicher, dass du das Array korrekt durchläufst, um alle Werte zu erfassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige