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]