VBA Excel Arraygröße abfragen / Fehler abfangen

Gast #3711038
Lesenswert?

Hallo,

ich habe ein Problem mit VBA in Excel.
Bei der folgenden Funktion wird die Arraygröße in Excel ermittelt.
Wenn ich die Funktion mit einem Bereich aufrufe (z.B. "=test(A1:A2)") 
erhalte ich als korrekte Lösung 2.
Ich möchte aber auch wenn ich nur eine Zelle markiere ("=test(A1)") die 
korrekte Lösung (1) erhalten.
Es erscheint jedoch "#Wert".

1
Function test(a As Variant) As Double
2

3
test = UBound(Application.Transpose(a), 1)
4

5
End Function

Hat jemand eine Lösung?

Danke!
#3712030
Lesenswert?

Die Anzahl Zellen in Bereichen der Tabelle liefert die Eigenschaft Count 
des Range-Objektes, das die Zellen umfaßt. Die Bereiche müssen nicht 
aneinandergrenzen und werden als Liste übergeben. Bsp.:

With Worksheets("Tabelle1")
  anz1 = .Range("A1:A3").Count  ' 3 Zellen
  anz2 = .Range("A1:B3").Count  ' 6 Zellen
  anz3 = .Range("A1:B3, D2:D5").Count  ' 10 Zellen
  anz4 = Union(.Range("A1:B3"), .Range("D2:D5")).Count  ' 10 Zellen
  Zeilen = .Range("A1:B3").Rows.Count  ' 3 Zeilen
  Spalten = .Range("A1:B3").Columns.Count  ' 2 Spalten
End With

Es kann auch Cells(Zeile, Spalte) anstatt "..." angegeben werden:
  anz2 = .Range(.Cells(1, 1), .Cells(3, 2)).Count  ' 6 Zellen

Bei Cells() für mehrfache Bereiche muß es aufgegliedert werden:
  anz3 = .Range(.Cells(1, 1), .Cells(3, 2)).Count + _
           .Range(.Cells(2, 4), .Cells(5, 4)).Count ' 10 Zellen


UBound() liefert den Index der Obergrenze eines Array, LBound() liefert 
den Index der Untergrenze, Array-Größe ist UBound()-LBound()+1.

Das 1. Argment darf auch ein Zellenbereich sein. Ein Test ergab, daß aus 
einer Liste mehrerer Bereiche wohl nur der zuerst genannte ausgewertet 
wird, die übrigen nicht gelten und daß es u.U. zu Fehlern kommen kann.
Eine einzelne Zelle ist kein Array, Range("A1:A1") gilt nicht.

Ist das 1. Argument ein Zellenbereich, dann sind als 2. Argument für die 
Dimension die Werte 1 und 2 möglich. UBound() und LBound() geben für den 
Wert 1 einen Zeilenindex, für Wert 2 einen Spaltenindex zurück. Index-
Untergrenze ist 1, da Tabellen in der 1. Zeile und 1. Spalte beginnen.
#3713042
Lesenswert?

Rainer V. schrieb:
> Index-Untergrenze ist 1, da Tabellen in 1. Zeile u. 1. Spalte beginnen

Korrektur: Index-Untergrenze ist immer 1, unabhängig davon, welche 
Zeilen- bzw. Spaltennummern im ausgewählten Zellenbereich tatsächlich 
auftreten, und unabhängig davon, welcher Array-Basis-Index durch die 
Anweisung "Option Base" eingestellt ist. Es hat also nichts mit dem 
Tabellenanfang in der 1. Zeile und 1. Spalte zu tun.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren