=Anzahl("B2:H2")
Wenn Du einen Text übergibst kann Excel nicht erkennen wann und ob die Funktion aufgerufen werden soll. Außerdem kannst Du keine Excel-Funktionen überschreiben, der Name muss ein anderer sein.
Function MyAnzahl(ByVal Where As Range) As Long
Dim R As Range
For Each R In Where
If Not IsEmpty(R) Then MyAnzahl = MyAnzahl + 1
Next
End Function
=MyAnzahl(B2:H2)
ist "identisch" mit
=ANZAHL(B2:H2)
In der Form ruft Excel die Funktion immer automatisch auf wenn sich in B2:H2 was ändert.
Wenn Du explizit einen Text übergeben willst, dann musst Du dafür sorgen das die Funktion jedes mal aufgerufen wird wenn irgendwas berechnet wird.
Function MyAnzahl(ByVal Where As String) As Long
Dim R As Range
Application.Volatile
For Each R In Range(Where)
If Not IsEmpty(R) Then MyAnzahl = MyAnzahl + 1
Next
End Function
=MyAnzahl("B2:H2")
ist "identisch" mit
=ANZAHL(INDIREKT("B2:H2"))
In der Form ruft Excel die Funktion immer auf, auch wenn sich in B2:H2 nichts ändert.
Andreas.