TOP

VBA-Ders 14.2. Özel bir işlev oluşturma

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):

Özel bir işlev oluşturma (UDF)

Kendi UDF fonksiyonumuzu oluşturmaya başlayalım:

Function IF_GREEN(paid As Range, amount)
     
End Function

Argümanlar:

  • paid As Range : kontrol edeceğimiz hücre;
  • amount : TRUE ise ekleyeceğimiz değer.
  • 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.

    Application.Volatile bize uygulamanın (Excel) değişikliklere duyarlı olması gerektiğini söyler (normal işlev IF'de olduğu gibi). Bu, değer her değiştiğinde işlevi yeniden hesaplayacağı anlamına gelir. Örneğin, Tutar sütunundaki (veya başka bir hücredeki) herhangi bir değeri değiştirirseniz, bu işlev yeniden hesaplanacak ve güncellenen tutar görüntülenecektir.

    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
    

    bunlara ek olarak

    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: 🢃