Zeile, Spalte oder Adresse der aktuellen Zelle einer UDF
Mitunter ist es wünschenswert, von einer selbst definierten Funktion die komplette Adresse oder Teile davon in eine Variable zu speichern. Die Angabe ActiveCell.Address scheint auf den ersten Blick zielführend zu sein, aber das täuscht. Im folgenden Code werden vier Variablen die entsprechenden Werte zugewiesen:
Dim AdresseAbsolut as String, AdresseRelativ as String Dim Zeile as Integer, Spalte as Integer AdresseAbsolut = Application.Caller.Address AdresseRelativ = Application.Caller.Address(0, 0) Zeile = Range(Application.Caller.Address).Row Spalte = Range(Application.Caller.Address).Column
Eine Beispielanwendung könnte so aussehen:
- In einer Tabelle stehen in Spalte C jeweils in einer Zelle Namen, teilweise mit aber auch ohne Vorname.
- Die unterschiedlichen Personen sind durch ein Komma getrennt.
- Solche Personengruppen sind in mehreren Zeilen zu finden.
- In unterschiedlichen Spalten soll per Benutzerdefinierter Funktion (UDF) berechnet werden, wie viele Namen in Spalte C der gleichen Zeile enthalten sind.
Wäre es immer die gleiche Spalte, wo die Ergebnisse ausgegeben werden sollen, dann könnte ja die Offset-Funktion zum tragen kommen. So aber muss ein anderer Weg beschritten werden …
Function AnzNamen() As Integer Dim Ze As Long, Sp As Integer Application.Volatile Sp = 3 'Spalte C Ze = Range(Application.Caller.Address).Row AnzNamen = UBound(Split(Cells(Ze, Sp), ",")) + 1 End Function[NachObenLetzte Verweis=„CS: Zelladresse Aufruf UDF”]