EXCEL-VBA, benutzerdef. Funktion für Zellbereiche

Hallo,

(EXCEL2000)
wie man benutzerdefinierte Funktionen in VBA programmiert, in denen Einzelparameter aus einer WorkSheet in die Parameterliste übergeben werden ist mir klar.
ABER:
Wie verhält es sich mit der Erstellung von benutzerdefinierten VBA-Funktionen, für die ZellBEREICHE (zB. A12:A25) aus einer WorkSheet in die Parameterliste übergeben werden sollen?

Danke

E. B.

wie man benutzerdefinierte Funktionen in VBA programmiert, in
denen Einzelparameter aus einer WorkSheet in die
Parameterliste übergeben werden ist mir klar.
Wie verhält es sich mit der Erstellung von benutzerdefinierten
VBA-Funktionen, für die ZellBEREICHE (zB. A12:A25) aus einer
WorkSheet in die Parameterliste übergeben werden sollen?

Hi Eric,
ich verstehe das so, für Zelle A1 könntest du das für Zellen A1:A25 nicht!?
Wenn dem so ist, an was genau hängt das, kannste da mal ein Beispiel für A1:A3 beschreiben.
Gruß
Reinhard

Hallo Erich,

die Übergabe von Bereichen an eine benutzerdefinierte Funktion funktioniert praktisch genau so wie die einer einzelnen Zelle. Damit VBA weiß, dass es mit einem Bereich arbeiten soll, definiert man die Variable des Bereichs entsprechend.

Beispiel:

Function Test(rngZellen As Range)
 For I = 1 To rngZellen.Rows.Count
 Test = rngZellen(I)
 MsgBox Test
 Next I
End Function

In der Funktion kann man die Werte des Bereichs als Werte eines Feldes abfragen, wobei die Zählung bei 1 beginnt. Bei Zellbereichen mit mehreren Spalten müssen entsprechend die Zählnummern für Rihe und Spalte angegeben werden.
Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke, so weit so gut!

ABER
Wie verhält es sich, wenn der Rückgabewert der Funktion selber ein Range sein soll?

Danke

E. B.

Hallo Eric,
wie meinst Du das?

Eine Funktion ermittelt typischerweise eine Zahl, Text, Datum oder Wahr/Falsch als Ergebnis.

Dabei kann der Text natürlich eine Zelladresse oder auch ein Bereich sein.

Im fogenden Beispiel wird aus dem der Funkton übergebenen Bereich die Adresse der 1. Zelle ausgegeben deren Wert >= 4 ist.

Function Test(rngZellen As Range) As String
 For I = 1 To rngZellen.Rows.Count
 If rngZellen(I).Value \>= 4 Then
 Test = rngZellen(I).Address
 Exit For
 End If
 Next I
End Function

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]