HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Christian
03.08.2026 19:20:53
AW: VBA Typen unverträglich
Hallo Daniel,

danke für die ausführliche Erklärung.
Im Prinzip ist meine Lösung doch nur die Kombination aus deinen beiden Vorschlägen oder?
Aber wie gesagt, ausführliche Erklärungen und Alternativen sind immer hilfreich.

DAnke und noch einen schönen Abend
Christian
Als Antwort auf diesen Beitrag
daniel
03.08.2026 19:06:36
AW: VBA Typen unverträglich
Hi

wenn du eine Zuweisung machst wie:
x = Range(...).Value

wird x nur dann ein Array, wenn der verwendete Zellbereich mindestens 2 Zellen umfasst.
ist der Zellbereich nur genau eine Zelle groß, dann wird x kein Array, sondern ein Einzelwert.
Einzelwerte musst du aber anders programmieren als Arrays.

du könntest jetzt nach der Zuweisung abfragen, was du bekommen hast und dann zwei unterschiedliche Programmierungen erstellen:
 Eingabearray = ws.Range("I1:I" & GesamtZeilen).Value

If Vartype(EingabeArray) < vbArray then
... hier die Programmierung für Einzelwert
else
... hier die Programmierung für Array
end if


das ist aber in der Regel doppelter Aufwand, da die Arbeit ja im Prinzip in beiden Fällen die gleiche ist.
daher bevorzuge ich es, auch den Einzelwert in ein zweidimensionales Array zu stecken, damit alles einheitlich programmiert werden kann.
hierzu gibt es zwei Wege:

a) man fragt erstmal ab, wie groß der Zellbereich überhaupt ist und gestaltet dann die Zuweisung unterschiedlich.
GesamtZeilen = ws.Cells(ws.Rows.Count, "I").End(xlUp).Row

if GesamtZeilen = 1 then
Redim Eingabearray(1 to 1, 1 to 1)
Eingabearray(1, 1) = ws.Range("I1").value
else
Eingabearray = ws.Range("I1:I" & GesamtZeilen).Value
end if

damit bekommst du dann ein zweidimensionales Array mit nur einem Wert, dh der Rest deiner Programmierung sollte dann funktionieren, egal ob eine oder mehr Zellen.

b) man weist der Variablen nicht nur eine Spalte, sondern zwei Spalten zu. Damit hat man immer zwei Zellen (auch wenn es nur eine Zeile ist), und bekommt auch immer das Array.
Wenn die zweite Spalte stört oder Probleme in der weiteren Programmierung macht, kann man sie mit Redim Preserve wieder entfernen.
Eingabearray = ws.Range("I1:J" & GesamtZeilen).Value

Redim Preserve EingabeArray(1 to Ubound(Eingabearry, 1), 1 to 1)


Gruß Daniel

Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.