Freigeben über

Range in einer Excel/VBA-Function

Anonym
2024-02-25T12:46:32+00:00

Guten Tag,

ich möchte in einer Tabelle eine Function aufrufen, die eine "Range" als Parameter hat:

   =Anzahl("B2:H2")

In der Function will ich dann auswerten, in welchen Zellen etwas drin steht, also

   Function Anzahl(Range as Object)

       Dim zelle as Object

       For each zelle in Range

            If zelle <> "" then ....

       next zelle

   End Function

Funktioniert das so (z.Zt. bei mir nicht)?

Danke, Laika

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
{count} Stimmen

1 Antwort

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144K Zuverlässigkeitspunkte Freiwilliger Moderator
    2024-02-25T15:53:34+00:00
       =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.

    0 Kommentare Keine Kommentare