Benutzerdefinierte Funktionen

Wenn die Standardfunktionen von Excel nicht ausreichen, kann man über benutzerdefinierte Funktionen weitere Funktionalitäten erhalten.

Diese Funktionen werden in Excel wie Makros erstellt und bearbeitet.
Sie beginnen immer mit "Function funktion_xyz(yyy)".

In den Tabellenblättern werden sie wie folgt eingegeben:
=funktion_xyz(A1)

Hier verzichte ich mit Absicht auf die tabellarische Form wegen der Übersichtlichkeit.

Sehr umfangreiche benutzerdefinierte Funktionen sind auf eigene Modulblätter geschrieben:
Modulblatt     Diese können direkt in die Arbeitsmappen importiert werden.


Bildschirmauflösung ausgeben
Ersteller: leider unbekannt

=ScreenResolution()

Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Const HORZRES = 8
Const VERTRES = 10

Function ScreenResolution()

Dim lRval As Long
Dim lDc As Long
Dim lHSize As Long
Dim lVSize As Long

    lDc = GetDC(0&)
    lHSize = GetDeviceCaps(lDc, HORZRES)
    lVSize = GetDeviceCaps(lDc, VERTRES)
    lRval = ReleaseDC(0, lDc)
    ScreenResolution = lHSize & "x" & lVSize

End Function
'Zum Testen im Direktfenster:
Sub GetScreenSize()
    Debug.Print ScreenResolution()
End Sub

Modulblatt    Zum einfachen Download

nach oben


Benutzername anzeigen (Excelbenutzer)

=BenutzerName()

Function BenutzerName()
    BenutzerName = Application.UserName
End Function

nach oben


Login-Namen unter Windows NT

=BenutzerName1()

Function BenutzerName1()
    BenutzerName1 = Environ("username")
End Function

nach oben


Datum Anhand der KW bestimmen

=KWDatum(A1;HEUTE())
   
     Kalenderwoche in Zelle A1; aktuelles Kalenderjahr über Funktion "=heute()"

Function KWDatum(Kalenderwoche As Integer, Jahr As Date) As Date
    tYear = DateSerial(Year(Jahr), 1, 1)
    KWDatum = tYear + 1 - Application.WeekDay(tYear, 2) + (Kalenderwoche - 1) * 7
End Function

nach oben


Feiertage berechnen und als Feiertagsname ausgeben

 =Feiertag(A1)
 =Feiertag(1.1.2001)

Modulblatt    Zum einfachen Download

Function Feiertag(Datum As Date)
Dim J As Integer
Dim O As Date
J = Year(Datum)
O = Ostern(J)
Select Case Datum
    Case Is = DateSerial(J, 1, 1)
        Feiertag = "Neujahr"
    Case Is = DateSerial(J, 1, 6)
        Feiertag = "Dreikönig*"
    Case Is = DateAdd("D", -2, O)
        Feiertag = "Karfreitag"
    Case Is = O
        Feiertag = "Ostersonntag"
    Case Is = DateAdd("D", 1, O)
        Feiertag = "Ostermontag"
    Case Is = DateSerial(J, 5, 1)
        Feiertag = "Erster Mai"
    Case Is = DateAdd("D", 39, O)
        Feiertag = "Christi Himmelfahrt"
    Case Is = DateAdd("D", 49, O)
        Feiertag = "Pfingstsonntag"
    Case Is = DateAdd("D", 50, O)
        Feiertag = "Pfingstmontag"
    Case Is = DateAdd("D", 60, O)
        Feiertag = "Fronleichnam*"
    Case Is = DateSerial(J, 8, 15)
        Feiertag = "Maria Mimmelfahrt*"
    Case Is = DateSerial(J, 10, 3)
        Feiertag = "Deutsche Einheit"
    Case Is = DateSerial(J, 10, 31)
        Feiertag = "Reformationstag*"
    Case Is = DateSerial(J, 11, 1)
        Feiertag = "Allerheiligen*"
    Case Is = DateSerial(J, 12, 24)
        Feiertag = "Heilig Abend*"
    Case Is = DateSerial(J, 12, 25)
        Feiertag = "EWeihnacht"
    Case Is = DateSerial(J, 12, 26)
        Feiertag = "ZWeihnacht"
    Case Is = DateSerial(J, 12, 31)
        Feiertag = "Silvester*"

Case Else
    Feiertag = ""
End Select
End Function

' von: Hans W. Herber
' wird zusätzlich benötigt
Public Function Ostern(Yr As Integer)
Dim D As Integer
D = (((255 - 11 * (Yr Mod 19)) - 21) Mod 30) + 21
Ostern = DateSerial(Yr, 3, 1) + D + (D > 48) + 6 - _
((Yr + Yr \ 4 + D + (D > 48) + 1) Mod 7)
End Function

nach oben


Beschreibungen im Funktionsassistent für eigene Funktionen erstellen
von Bernd Held:

Schaut Euch dazu in der Hilfe die MacroOptions-Methode an. 
Da gibt es einen Parameter der Description heißt. 
Mit dem folgenden Makro kannst man eine benutzerdefinierte Funktion auch gleich einer Kategorie zuordnen. Dabei kannst man dann auch eine Beschreibung machen.

Sub FunktionInAndereKategoriezuweisen()
    Application.MacroOptions _ Macro:="test", Description:="Test-Beschreibung", Category:=1
End Sub

Zum Testen:
Function Test()
    MsgBox "Hallo"
End Function

Info: Aufschlüsselung der Kategorien:

  1. Finanzmathematik
  2. Datum & Zeit
  3. Math. & Trigonometrie
  4. Statistik
  5. Matrix
  6. Datenbank
  7. Text
  8. Logik
  9. Information
  10. Benutzerdefiniert

nach oben


Musterfunktion: Auf 5 Rappen runden (bzw. 0,05)

Modulblatt   Zum einfachen Download

Beispieldatei mit praktischem Nutzwert:
Wird mit Makro in die Kategorie "Finanzmathematik" eingetragen.
Funktion rundet auf 0,05 auf bzw. ab.
Makro zum integrieren in Button dabei:
Funktionsassistent startet mit Hinweistext und normaler Zellauswahl.
Formatierung für Schweizer Franken wird für Zelle durchgeführt

nach oben


 

Letzte Änderungen auf dieser Seite am 29.10.2006

Valid XHTML 1.0 Transitional    Valid CSS!

Berti's ExcelABC mit vielen Tipps und Tricks rund um Excel und die Makros bzw. VBA

Seitenanfang

A B C D E F G H i J K L M N O P Q R S T U V W X Y Z
Excel: 39  |  Formeln: 1  |  Funktionen: 8  |  Makro / VBA: 40  |  Hintergrundinfos: 7  |  Beispieldateien: 11  |  Komplettlösungen: 1