Werte Array in ein anderes Array übergeben
Schritt-für-Schritt-Anleitung
Um ein Array in VBA zu übergeben, kannst du die folgenden Schritte befolgen:
-
Deklariere die Variablen: Lege die Variablen für das Eingangs- und Ausgangsarray fest.
Dim ImpDatArray As Variant
Dim ErgDataArray As Variant
Dim last_cell As Long
Dim lngIndex As Long
-
Lese den Zellbereich ein: Weise dem ImpDatArray die Werte aus einem bestimmten Zellbereich zu.
last_cell = 10000 ' Beispielwert
ImpDatArray = Range("A1:AG" & last_cell).Value
-
Initialisiere das Ausgangsarray: Nutze Redim, um das Array dynamisch zu erstellen.
ReDim ErgDataArray(0) As Variant
-
Schleife durch das Input-Array: Prüfe die gewünschten Bedingungen und übergebe die gültigen Werte in das neue Array.
For L = LBound(ImpDatArray) To UBound(ImpDatArray)
If ImpDatArray(L, 1) = 10 Then ' Beispielbedingung
ReDim Preserve ErgDataArray(lngIndex)
ErgDataArray(lngIndex) = WorksheetFunction.Index(ImpDatArray, L, 0)
lngIndex = lngIndex + 1
End If
Next L
-
Gib die Werte in die Tabelle aus: Übertrage die Werte aus dem ErgDataArray in den gewünschten Bereich in Excel.
With Sheet2.Range("A1").Resize(lngIndex, UBound(ImpDatArray, 2))
.ClearContents
.Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ErgDataArray))
End With
Häufige Fehler und Lösungen
-
Fehler: "Index außerhalb der Grenzen": Dieser Fehler tritt auf, wenn du versuchst, auf ein Element außerhalb der Dimensionen eines Arrays zuzugreifen. Stelle sicher, dass du die Grenzen mit LBound und UBound korrekt bestimmst.
-
Lösung: Überprüfung der Array-Dimensionen: Verwende Debugging, um die Dimensionen deines Arrays zu überprüfen und sicherzustellen, dass du nur gültige Indizes verwendest.
Alternative Methoden
Eine alternative Methode, um ein Array in VBA zu übergeben, besteht darin, eine Funktion zu erstellen, die das Array zurückgibt. Beispiel:
Function GetValidDataArray() As Variant
Dim ImpDatArray As Variant
Dim ErgDataArray As Variant
' ... (Code wie oben)
GetValidDataArray = ErgDataArray
End Function
Du kannst diese Funktion dann aufrufen und das Ergebnis in einer Variablen speichern.
Praktische Beispiele
Hier ist ein praktisches Beispiel für den Einsatz der oben beschriebenen Schritte:
Sub TestArrayUebergeben()
Dim ImpDatArray As Variant
Dim ErgDataArray As Variant
Dim last_cell As Long
Dim lngIndex As Long
last_cell = 10000
ImpDatArray = Range("A1:AG" & last_cell).Value
ReDim ErgDataArray(0)
For L = LBound(ImpDatArray) To UBound(ImpDatArray)
If ImpDatArray(L, 1) > 10 Then ' Beispielbedingung
ReDim Preserve ErgDataArray(lngIndex)
ErgDataArray(lngIndex) = WorksheetFunction.Index(ImpDatArray, L, 0)
lngIndex = lngIndex + 1
End If
Next L
With Sheet2.Range("A1").Resize(lngIndex, UBound(ImpDatArray, 2))
.ClearContents
.Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ErgDataArray))
End With
End Sub
Tipps für Profis
-
Effiziente Nutzung von Redim Preserve: Achte darauf, dass Redim Preserve nur dann verwendet wird, wenn es notwendig ist, da es die Performance beeinträchtigen kann, wenn es häufig in Schleifen verwendet wird.
-
Verwendung von WorksheetFunction: Nutze die WorksheetFunction.Index-Methode, um gezielt Werte aus einem Array zu extrahieren, anstatt sie einzeln zuzuweisen.
FAQ: Häufige Fragen
1. Frage
Wird beim Einfügen in die Tabelle wirklich das gesamte Array übernommen?
Antwort: Ja, wenn du das Array korrekt übergibst, werden alle Spalten und Zeilen übernommen.
2. Frage
Wie kann ich sicherstellen, dass nur gültige Werte in das neue Array übernommen werden?
Antwort: Verwende Bedingungen innerhalb deiner Schleife, um die Werte zu prüfen, bevor du sie in das Ausgangsarray überträgst.