HOWTO · VBA

Abrufen der Array-Länge in VBA

Dieses Tutorial zeigt verschiedene Möglichkeiten, um die Array-Länge in VBA zu erhalten.

Auf dieser Seite

Um die Elemente eines VBA-Arrays zu zählen, ziehen Sie den niedrigsten Index vom höchsten ab und addieren eins: UBound(array) - LBound(array) + 1. Mit + 1 werden beide Endindizes mitgezählt. Das funktioniert, wenn ein Array bei null, eins oder einer anderen festgelegten Untergrenze beginnt. UBound allein liefert nur den höchsten Index, der nicht unbedingt der Anzahl der Elemente entspricht. Verwenden Sie COUNTA nur, wenn Sie nichtleere Werte zählen und nicht die Kapazität des Arrays bestimmen möchten.

Array-Länge in VBA mit UBound und LBound ermitteln

Zum Beispiel deklariert Dim names(5 To 9) As String fünf Elemente mit den Indizes 5 bis 9. Die Länge beträgt UBound(names) - LBound(names) + 1, also 9 - 5 + 1 = 5. An den expliziten Grenzen wird deutlich, warum die Obergrenze allein nicht der Anzahl entspricht. Diese vollständige VBA-Prozedur verwendet Debug.Print und &, um die Beschriftung mit dem berechneten Wert zu verbinden: Sub ShowArrayLength(): Dim names(5 To 9) As String: Debug.Print "Array length: " & (UBound(names) - LBound(names) + 1): End Sub. Debug.Print gibt den berechneten Wert im Direktfenster des VBA-Editors aus. Die bereitgestellte Laufzeitevidenz bezieht sich auf das separate Python-Rechenbeispiel weiter unten, nicht auf die Ausführung dieser VBA-Prozedur.

Wenn mehrere Prozeduren dieselbe Berechnung benötigen, legen Sie eine Hilfsfunktion in einem Standardmodul an und rufen Sie sie bei Bedarf auf: Public Function ArrayLength(ByRef values As Variant) As Long: ArrayLength = UBound(values) - LBound(values) + 1: End Function. Übergeben Sie ein bereits zugewiesenes Array. Die Hilfsfunktion setzt voraus, dass sich dessen Grenzen auslesen lassen, und behandelt kein nicht zugewiesenes dynamisches Array. Der Parameter vom Typ Variant kann das Array aufnehmen; UBound und LBound berücksichtigen dessen tatsächliche Ober- und Untergrenze, auch wenn die Untergrenze ungleich null ist.

Dieselbe Formel gilt für Arrays, die mit Array zurückgegeben werden, etwa für ein Variant, dem Array("Glen", "Yumi", "Myla") zugewiesen wurde. Berechnen Sie die Länge anhand der Grenzen, statt eine bestimmte Untergrenze vorauszusetzen. Die standardmäßige Untergrenze in VBA kann von Option Base beeinflusst werden; für Array oder eine Deklaration können eigene Regeln gelten. Mit LBound vermeiden Sie, eine solche Annahme in die Berechnung einzubauen.

Führen Sie das folgende Python-Rechenbeispiel aus, um dasselbe Ergebnis zu sehen; es führt die VBA-Prozedur nicht aus. Die Ausgabe verwendet die englische Beschriftung Array length: , die im unveränderten Beispiel erhalten bleibt:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

lower_bound = 5
upper_bound = 9
length = upper_bound - lower_bound + 1
print(f"Array length: {length}")
Array length: 5

Dynamische und nicht initialisierte Arrays behandeln

Ein dynamisches Array wird zunächst ohne Grenzen deklariert, zum Beispiel mit Dim values() As String, und erhält seine Grenzen später durch ReDim values(1 To 4). Nach der Zuweisung verwenden Sie dieselbe Formel mit UBound und LBound. Bei einem Array fester Größe stehen die Grenzen bereits bei der Deklaration fest; bei einem dynamischen Array hängen sie von der aktuellen Zuweisung ab.

Ein nicht zugewiesenes dynamisches Array hat keine verwendbaren Grenzen: Ein Aufruf von LBound oder UBound damit verursacht einen Laufzeitfehler. IsEmpty prüft, ob ein Variant den besonderen Wert Empty enthält; die Funktion erkennt nicht, ob einem dynamischen Array Grenzen zugewiesen wurden. Wenn Code ein nicht zugewiesenes Array erhalten kann, setzen Sie die Aufrufe von LBound und UBound in einen eng begrenzten Fehlerbehandlungsabschnitt und behandeln Sie den Fehler beim Auslesen der Grenzen als Fall eines nicht zugewiesenen Arrays. Lassen Sie andere Arbeit außerhalb dieses Abschnitts, damit ein unabhängiger Fehler nicht fälschlich als Prüfung der Zuweisung gilt. Nach der Zuweisung mit ReDim gilt wieder die übliche Formel. Die obige Prozedur verwendet ein Array fester Größe und hat daher immer Grenzen.

Mit COUNTA nichtleere Array-Werte zählen

In Excel VBA zählt WorksheetFunction.CountA(values) nichtleere Werte in einem Array gemäß den Excel-Regeln für COUNTA. Das ist praktisch, wenn Sie wissen möchten, wie viele Einträge Werte enthalten. Die Funktion ist kein allgemeiner Ersatz für die Array-Länge: Ein zugewiesenes Array kann leere Plätze enthalten, sodass die Anzahl der nichtleeren Einträge kleiner sein kann als die Anzahl der Indizes. Sind alle Elemente belegt, können beide Anzahlen übereinstimmen. Wenn Sie die Kapazität oder die Anzahl verfügbarer Plätze benötigen, verwenden Sie stattdessen die Formel mit den Grenzen.

COUNTA ist ein Aufruf einer Arbeitsblattfunktion und keine VBA-Funktion zum Auslesen von Grenzen. Das Array muss in einem Format vorliegen, das die Arbeitsblattfunktion verarbeiten kann. Für diese Methode ist keine Begrenzung auf 30 Elemente erforderlich. Verwenden Sie UBound und LBound, um die Anzahl der Array-Elemente auch bei einer von null abweichenden Untergrenze zu ermitteln. Verwenden Sie COUNTA nur, wenn Sie die nichtleeren Werte zählen möchten.