Mit VBA können Sie eine benutzerdefinierte Funktion erstellen (genannt User Defined Function), die wie normale Funktionen in Arbeitsblättern verwendet werden kann. Dies ist nützlich, wenn die vorhandenen Excel-Funktionen nicht ausreichen.
User Defined Function (UDF) ist eine vom Benutzer erstellte Funktion, die in der Standardfunktionalität von Excel nicht vorhanden ist.
In diesem Beispiel erstellen wir eine benutzerdefinierte IF-Funktion, die in Berechnungen auf einem Arbeitsblatt verwendet werden kann, ähnlich wie andere Excel-Funktionen.
Um den Wert von (B2) anzuzeigen, wenn Zelle (C2) den Wert („YES“) hat, könnten wir die Funktion IF in der Formel =IF(C2="YES",B2,0) verwenden:
Unser Ziel in diesem Fall ist es, eine Funktion zu erstellen, die Folgendes tun könnte =IF(C2 hat einen grünen Hintergrund,B2,0) und die wir wie folgt schreiben würden: =IF_GREEN(C2,B2):
Beginnen wir mit der Erstellung unserer eigenen UDF-Funktion:
Function IF_GREEN(paid As Range, amount)
End Function
Argumente:
Wenn die Prüfung in diesem Fall FALSE zurückgibt, ist der Wert immer 0, es gibt also keinen Grund, ein Argument dafür anzugeben.
Um zu überprüfen, ob die Farbe korrekt ist, können Sie die Zelle verwenden, die die benötigte Farbe enthält:
Function IF_GREEN(paid As Range, amount)
green_color = Sheets("Sheet1").Range("K1").Interior.color
End Function
Um jedoch eine Abhängigkeit von der Zelle zu vermeiden, verwenden wir einfach die Nummer der gewünschten Farbe:
Function IF_GREEN(paid As Range, amount)
green_color = 5296274 'Grün
End Function
Um die Hintergrundfarbnummer einer Zelle zu bestimmen, wählen Sie die Zelle aus und führen Sie dieses Makro aus:
Sub test_color()
MsgBox ActiveCell.Interior.color
End Sub
Jetzt müssen wir nur noch die Farbe der Zelle mit IF überprüfen:
Function IF_GREEN(paid As Range, amount)
Application.Volatile
green_color = 5296274 'Grün
If paid.Interior.color = green_color Then 'WENN WAHR
IF_GREEN = amount
Else 'WENN LÜGT
IF_GREEN = 0
End If
End Function
Jetzt ist unsere Funktion einsatzbereit.
Allerdings ist die Änderung der Zellfüllung nicht das Ereignis, das die Neuberechnung auslöst. Um Excel zu zwingen, die Werte neu zu berechnen, können Sie eine beliebige leere Zelle auswählen und auf „Löschen“ klicken oder eine Schaltfläche „Aktualisieren“ („Refresh“) hinzufügen, die alles aktualisiert, wenn Sie darauf klicken:
Sub refresh_macro()
Application.Calculate
End Sub
Nachfolgend finden Sie eine verkürzte Schreibweise derselben Funktion:
Function IF_GREEN(paid As Range, amount)
Application.Volatile
IF_GREEN = 0 'WENN LÜGT
If paid.Interior.color = 5296274 Then IF_GREEN = amount 'WENN WAHR
End Function
Sie können die Excel-Datei mit diesem Beispiel herunterladen, indem Sie hier klicken.