VBA Excel Arraygröße abfragen / Fehler abfangen

Gast #3711038
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!
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.
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.