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

Forumthread: Variant Array verkleinern

Variant Array verkleinern
Axel
Hallo,
ich habe folgendes Problem: ich verwende in einem, relativ aufwendigen Skript mehrere Arrays, welche ich als Variant deklarieren musste. Nun muss ich aus einem Daten aussortieren.
Dies mache ich über eine Schleife welche den aktuellen Wert mit dem Nachfolger überschreibt. Allerdings verkürzt sich dadurch der Array.
'Fehlerhafte Werte aussortieren
For i = 1 To AnzahlZeilen
If Ergebnisarray(i + Zaehler, 1) = 99999 Then
Do While Ergebnisarray(i + Zaehler, 1) = 99999
Zaehler = Zaehler + 1
Loop 'Häufigkeit der 99999 in Folge
End If 'Finden der 99999
If i + Zaehler < AnzahlZeilen Then
Ergebnisarray(i, 1) = Ergebnisarray(i + Zaehler, 1)
For j = 1 To 7
Versuchsplan(i, j) = Versuchsplan(i + Zaehler, j)
Next
Else
ReDim Preserve Ergebnisarray(1 To (AnzahlZeilen - Zaehler), 1 To 1) 'Anpassen der Arraygröße
ReDim Preserve Versuchsplan(1 To (AnzahlZeilen - Zaehler), 1 To AnzahlSpalten)
i = AnzahlZeilen
End If 'Array Ende abschneiden, da leer
Next i 'Anzahl Versuche
Die ReDim Preserve Anweisung funktioniert hier leider nicht. Welche Möglichkeit habe ich sonst um die letzten Spalten des Arrays zu entfernen?
Gruß und Dank
Axel
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Variant Array verkleinern
20.01.2010 12:22:41
Rudi
Hallo,
du kannst nur die letzte Dimension eines Arrays redimensionieren.
Transponieren-Redimensionieren-Transponieren.
Ergebnisarray=Worsheetfunction.Transpose(Ergebnisarray)
ReDim Preserve Ergebnisarray(1 To 1, 1 To (AnzahlZeilen - Zaehler))
Ergebnisarray=Worsheetfunction.Transpose(Ergebnisarray)
Gruß
Rudi
Anzeige
ungetestet.
20.01.2010 12:29:47
Tino
Hallo,
da man nur den rechten Teil Re- Dimensionieren kann,
kannst Du es mal versuchen dieses Array zu Transponieren (drehen)
Ergebnisarray = Application.Transpose(Ergebnisarray)
ReDim Preserve Ergebnisarray(1 To 1, 1 To (AnzahlZeilen - Zaehler)) 'Anpassen der Arraygröße
Ergebnisarray = Application.Transpose(Ergebnisarray)
ReDim Preserve Versuchsplan(1 To UBound(Versuchsplan), 1 To AnzahlSpalten)
Versuchsplan = Application.Transpose(Versuchsplan)
ReDim Preserve Versuchsplan(1 To AnzahlSpalten, 1 To (AnzahlZeilen - Zaehler))
Versuchsplan = Application.Transpose(Versuchsplan)
Oder erstelle zwei neue und fülle diese in einer Schleife.
Gruß Tino
Anzeige
AW: Variant Array verkleinern
20.01.2010 15:54:40
Axel
Danke, ich werden dann wohl einen zweiten Array aufmachen müssen.
Das hatte ich befürchtet -.-
Gruß und Dank
Axel
Noch 'n Array: na und? was soll's
20.01.2010 19:18:46
Rudi
Hallo,
ich weiß ja jetzt nicht, wie groß deine Arrays sind aber Ich habe letztens 16MB TAB-getrennte .txt auf nem Pentium4 mit 512MB RAM in Arrays verarbeitet. Das ist nichts kritisches.
Gruß
Rudi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Variant Array effizient verkleinern in VBA


Schritt-für-Schritt-Anleitung

  1. Transponiere das Array: Um eine Dimension eines variant array in VBA zu verkleinern, musst du das Array zuerst transponieren. Das geht mit folgender Zeile:

    Ergebnisarray = Application.Transpose(Ergebnisarray)
  2. Redimensioniere das transponierte Array: Danach kannst du die Dimension anpassen. Zum Beispiel, um die Größe des Arrays zu verringern:

    ReDim Preserve Ergebnisarray(1 To 1, 1 To (AnzahlZeilen - Zaehler))
  3. Transponiere das Array zurück: Nachdem du die Dimension geändert hast, musst du das Array wieder transponieren:

    Ergebnisarray = Application.Transpose(Ergebnisarray)
  4. Wende den gleichen Prozess auf den Versuchsplan an: Um den Versuchsplan ebenfalls zu verkleinern, führe ähnliche Schritte durch:

    Versuchsplan = Application.Transpose(Versuchsplan)
    ReDim Preserve Versuchsplan(1 To AnzahlSpalten, 1 To (AnzahlZeilen - Zaehler))
    Versuchsplan = Application.Transpose(Versuchsplan)

Häufige Fehler und Lösungen

  • Fehler beim Redimensionieren: Wenn du versuchst, mehr als eine Dimension eines variant array mit ReDim Preserve zu ändern, führt das zu einem Fehler. Stelle sicher, dass du nur die letzte Dimension änderst.

  • Werte gehen verloren: Achte darauf, dass beim Redimensionieren mit ReDim Preserve alle Werte, die nicht in der neuen Dimension liegen, verloren gehen. Überprüfe daher die Dimensionen vor dem Redimensionieren.


Alternative Methoden

  • Erstelle neue Arrays: Anstatt ein bestehendes Array zu bearbeiten, kannst du auch zwei neue Arrays erstellen und die gewünschten Werte in einer Schleife kopieren:

    Dim neuesErgebnisarray() As Variant
    ReDim neuesErgebnisarray(1 To (AnzahlZeilen - Zaehler), 1 To 1)
    
    For i = 1 To UBound(neuesErgebnisarray, 1)
       neuesErgebnisarray(i, 1) = Ergebnisarray(i, 1)
    Next i
  • Verwende Collections: Eine andere Möglichkeit ist die Verwendung von Collections oder Dictionaries, die dynamisch wachsen und schrumpfen können, ohne dass du dich um das Redimensionieren kümmern musst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du ein variant array in VBA verkleinern kannst:

Sub BeispielVBA()
    Dim Ergebnisarray() As Variant
    Dim AnzahlZeilen As Long
    Dim Zaehler As Long

    ' Beispielhafte Initialisierung
    Ergebnisarray = Array(1, 2, 99999, 4, 99999, 6)

    ' Schleife zum Entfernen der 99999-Werte
    For i = LBound(Ergebnisarray) To UBound(Ergebnisarray)
        If Ergebnisarray(i) = 99999 Then
            Zaehler = Zaehler + 1
        End If
    Next i

    ' Redimensionieren
    ReDim Preserve Ergebnisarray(LBound(Ergebnisarray) To UBound(Ergebnisarray) - Zaehler)
End Sub

Tipps für Profis

  • Nutze vba preserve sinnvoll: Denke daran, die ReDim Preserve-Anweisung nur dann zu verwenden, wenn es unbedingt nötig ist, um die Performance zu verbessern.

  • Optimaler Code: Reduziere die Anzahl der Schleifen und versuche, die Logik so zu gestalten, dass du die Anzahl der Redimensionierungsoperationen minimierst.

  • Debugging: Nutze die Debugging-Tools von VBA, um die Größe deiner Arrays während der Laufzeit zu überprüfen.


FAQ: Häufige Fragen

1. Kann ich mehr als eine Dimension eines Arrays mit ReDim Preserve ändern?
Nein, du kannst nur die letzte Dimension eines Arrays redimensionieren.

2. Was sind die Vorteile von variant arrays in VBA?
Variant arrays bieten Flexibilität, da sie unterschiedliche Datentypen speichern können, was hilfreich ist, wenn du mit heterogenen Daten arbeitest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige