VBA ile, tıpkı normal işlevler gibi çalışma sayfalarında kullanılabilecek özel bir işlev (User Defined Function adı verilir) oluşturabilirsiniz. Bu, mevcut Excel işlevleri yeterli olmadığında kullanışlıdır.
User Defined Function (UDF), standart Excel işlevselliğinde bulunmayan, kullanıcı tarafından oluşturulan bir işlevdir.
Bu örnekte, diğer Excel işlevlerine benzer şekilde, çalışma sayfasındaki hesaplamalarda kullanılabilecek özel bir IF işlevi oluşturacağız.
(C2) hücresi ("YES") değerine sahipse (B2) değerini görüntülemek için, =IF(C2="YES",B2,0) formülündeki IF işlevini kullanabiliriz:
Bu durumda amacımız bunu yapabilecek =IF(C2 yeşil arka plana sahiptir,B2,0) ve şöyle yazacağımız bir fonksiyon yaratmaktır: =IF_GREEN(C2,B2):
Kendi UDF fonksiyonumuzu oluşturmaya başlayalım:
Function IF_GREEN(paid As Range, amount) End Function
Argümanlar:
Bu durumda, kontrol FALSE değerini döndürürse değer her zaman 0 olacaktır, dolayısıyla bunun için bir argüman belirtmeye gerek yoktur.
Rengin doğru olup olmadığını kontrol etmek için ihtiyacınız olan rengi içeren hücreyi kullanabilirsiniz:
Function IF_GREEN(paid As Range, amount) green_color = Sheets("Sheet1").Range("K1").Interior.color End Function
Ancak hücreye bağlı kalmayı önlemek için sadece istenen rengin numarasını kullanacağız:
Function IF_GREEN(paid As Range, amount) green_color = 5296274 'Yeşil End Function
Bir hücrenin arka plan renk numarasını belirlemek için hücreyi seçin ve şu makroyu çalıştırın:
Sub test_color() MsgBox ActiveCell.Interior.color End Sub
Şimdi tek yapmamız gereken IF komutunu kullanarak hücrenin rengini kontrol etmek:
Function IF_GREEN(paid As Range, amount) Application.Volatile green_color = 5296274 'Yeşil If paid.Interior.color = green_color Then 'EĞER DOĞRUYSA IF_GREEN = amount Else 'YALAN EĞER IF_GREEN = 0 End If End Function
Artık fonksiyonumuz kullanıma hazır.
Ancak hücre dolgusunun değiştirilmesi yeniden hesaplamayı tetikleyen olay değildir. Excel'i değerleri yeniden hesaplamaya zorlamak için herhangi bir boş hücreyi seçip Sil'e tıklayabilir veya tıkladığınızda her şeyi yenileyecek bir Yenile düğmesi ("Refresh") ekleyebilirsiniz:
Sub refresh_macro() Application.Calculate End Sub
Aşağıda aynı işlevi yazmanın kısaltılmış bir yolu verilmiştir:
Function IF_GREEN(paid As Range, amount) Application.Volatile IF_GREEN = 0 'YALAN EĞER If paid.Interior.color = 5296274 Then IF_GREEN = amount 'EĞER DOĞRUYSA End Function
Bu örneği içeren Excel dosyasını buraya tıklayarak indirebilirsiniz: 🢃