Za pomocą VBA możesz utworzyć niestandardową funkcję (zwaną User Defined Function), której można używać w arkuszach kalkulacyjnych tak samo jak zwykłych funkcji. Jest to przydatne, gdy istniejące funkcje Excel nie są wystarczające.
User Defined Function (UDF) to funkcja utworzona przez użytkownika, która nie istnieje w standardowej funkcjonalności Excel.
W tym przykładzie utworzymy niestandardową funkcję IF, której można używać w obliczeniach w arkuszu, podobnie jak inne funkcje Excel.
Aby wyświetlić wartość (B2), jeśli komórka (C2) ma wartość („YES”), możemy użyć funkcji IF we wzorze =IF(C2="YES",B2,0):
Naszym celem w tym przypadku jest stworzenie funkcji, która mogłaby to zrobić =IF(C2 ma zielone tło, B2,0) i którą zapisalibyśmy w następujący sposób: =IF_GREEN(C2,B2):
Zacznijmy tworzyć własną funkcję UDF:
Function IF_GREEN(paid As Range, amount) End Function
Argumenty:
W tym przypadku, jeśli sprawdzenie zwróci FALSE, wartość będzie zawsze równa 0, więc nie ma powodu podawać dla niej argumentu.
Aby sprawdzić, czy kolor jest prawidłowy, możesz użyć komórki zawierającej potrzebny kolor:
Function IF_GREEN(paid As Range, amount) green_color = Sheets("Sheet1").Range("K1").Interior.color End Function
Aby jednak uniknąć zależności od komórki, po prostu użyjemy numeru żądanego koloru:
Function IF_GREEN(paid As Range, amount) green_color = 5296274 'Zielony End Function
Aby określić numer koloru tła komórki, wybierz komórkę i uruchom to makro:
Sub test_color() MsgBox ActiveCell.Interior.color End Sub
Teraz wszystko, co musimy zrobić, to sprawdzić kolor komórki za pomocą IF:
Function IF_GREEN(paid As Range, amount) Application.Volatile green_color = 5296274 'Zielony If paid.Interior.color = green_color Then 'JEŚLI PRAWDA IF_GREEN = amount Else 'JEŚLI KŁAMIE IF_GREEN = 0 End If End Function
Teraz nasza funkcja jest gotowa do użycia.
Jednak zmiana wypełnienia komórek nie jest zdarzeniem powodującym ponowne obliczenie. Aby zmusić program Excel do ponownego obliczenia wartości, możesz zaznaczyć dowolną pustą komórkę i kliknąć Usuń lub dodać przycisk Odśwież („Refresh”), który odświeży wszystko po kliknięciu:
Sub refresh_macro() Application.Calculate End Sub
Poniżej znajduje się skrócony sposób zapisu tej samej funkcji:
Function IF_GREEN(paid As Range, amount) Application.Volatile IF_GREEN = 0 'JEŚLI KŁAMIE If paid.Interior.color = 5296274 Then IF_GREEN = amount 'JEŚLI PRAWDA End Function
Możesz pobrać plik Excel zawierający ten przykład, klikając tutaj: 🢃