Excel VBA Tanımlı Fonksiyon (UDF) nedir?
Örneğin, Excel'in yerleşik işlevleri tarafından kapsanmayan belirli ölçütlere göre nakliye maliyetini hesaplamanız gereken bir senaryoyu ele alalım. VBA Makrosunda Kullanıcı Tanımlı İşlev oluşturarak , ağırlık, mesafe ve nakliye yöntemi gibi gerekli hesaplamaları içeren bir formül tanımlayabilirsiniz. Kod için aşağıya bakın.

Bu UDF, diğer Excel fonksiyonları gibi herhangi bir çalışma sayfası hücresinde kullanılabilir.


Sağlanan örnekte, nakliye maliyetini hesaplamak için Excel VBA'da bir UDF oluşturduk. Bu UDF, kilogram başına oranı (KG), kilometre başına oranı (KM) ve seçilen nakliye türünü dikkate alır ve bize doğru nakliye maliyetini sağlar.
Kullanıcı Tanımlı Fonksiyonlar Nasıl Oluşturulur?
Örnekler
VBA'da kullanıcı tanımlı fonksiyonların kavramını ve kullanımını daha iyi anlamak için bazı örneklere bakalım:
Örnek 1 – Basit bir UDF Toplam Fonksiyonu Oluşturun
Bu örnekte, VBA'da herhangi iki değeri toplayacak ve sonucu fonksiyona girdiğimiz hücreye döndürecek basit bir kullanıcı tanımlı fonksiyon oluşturacağız.
- Adım 1: VBE'yi açın, Excel'de Alt + F11 tuşlarına basın, şeritteki Geliştirici sekmesine tıklayın ve ardından Visual Basic düğmesine tıklayın.

- Adım 2: VBE'de Ekle menüsüne tıklayın ve yeni bir modül oluşturmak için Modül'ü seçin.

- Adım 3: Modülde, “Function” anahtar sözcüğünü ve ardından fonksiyon adını kullanarak fonksiyonu tanımlayın. Bu örneği “SumFunction” olarak adlandırın ve fonksiyonun argümanlarını parantez içinde belirtin. Bu durumda, Double türünde iki argüman kullanacağız: “num1” ve “num2”.

Satırın sonundaki ' As Double' kısmı, UDF'nin Double türünde bir değer döndüreceğini belirtir. Başka bir deyişle, num1 ve num2'nin toplamını hesaplayacak ve sonucu Double veri türü olarak sağlayacaktır.
Not: "Double", temel "Integer" veri türünden daha yüksek hassasiyetle ondalık sayıları temsil etmek için kullanılan bir sayısal veri türünü ifade eder. Pozitif ve negatif sayıları depolayabilen bir kayan nokta veri türüdür.
- Adım 4: İstenen hesaplamayı gerçekleştiren kodu yazın. Bu örnekte, kod iki sayıyı toplar:

- Adım 5: Şimdi modülü kaydedip VBE'yi kapatalım.
VBA'da Kullanıcı Tanımlı Fonksiyonu, yani "SumFunction"ı oluşturduğunuzda, bunu Excel çalışma sayfanızda kolayca kullanabilirsiniz. Bir hücreye "=SumFunction" yazmaya başladığınızda, Excel otomatik olarak UDF için vurgulanmış bir öneri görüntüler.

Artık Excel çalışma sayfanızda oluşturulan UDF “SumFunction”ı kullanabilirsiniz. Örneğin, bir hücreye =SumFunction(5, 10) girebilirsiniz; bu, 15'in toplamını döndürür.

SumFunction = num1 + num2
End Function
Örnek 2 – Mantıksal Değerleri Test Etmek İçin Bir Fonksiyon Oluşturun
Bu örnekte, mantıksal değerleri test eden VBA'da Kullanıcı Tanımlı Bir İşlev oluşturacağız . Seçili hücrenin sayısal bir değeri varsa, UDF "Değer Doğru" mesajını döndürecek, hücre boşsa veya sıfıra sahipse, UDF "Değer Yanlış" çıktısını sağlayacaktır.
Adım 1: Yeni modülde, öncelikle Boolean türünde "value" adlı bir argüman alan "TestLogicalValue" adlı bir fonksiyon bildirerek başlayalım. Bu, fonksiyonun girdi olarak mantıksal bir değer (True veya False) beklediği ve bir sonucu dize veri türü olarak döndüreceği anlamına gelir.

Not: Bir Boole değeri, iki olası durumu temsil eden bir veri türüdür: Doğru veya Yanlış.
- Adım 2: Bir If ifadesi kullanarak, giriş değerinin True'ya eşit olup olmadığını kontrol eden bir koşul sağlayalım. Koşul doğruysa, işleve geçirilen mantıksal değer True'dur. Koşul doğruysa, kod "Value is TRUE" dizesini "TestLogicalValue" işlevine atar.
Bu, fonksiyon mantıksal değeri True olarak çağrıldığında “Değer TRUE” dizesini döndüreceği anlamına gelir.

- Adım 3: Adım 2'deki koşul yanlışsa, yani mantıksal değer True değilse, kod Else bloğuna geçer. Else bloklarında, kod “Value is FALSE”ı “TestLogicalValue” işlevine atar.
Bu, fonksiyon True olmayan mantıksal bir değerle çağrıldığında (yani False olduğunda), “Değer FALSE” dizesini döndüreceğini belirtir.

- Adım 4: Şimdi Function'ı kaydedip VBE'yi kapatalım.
Test etmek istediğiniz mantıksal değerin A1 hücresinde olduğunu varsayarak, herhangi bir hücreye =TestLogicalValue(A1) formülünü girin.

Enter'a bastığınızda, A1 hücresindeki mantıksal değere bağlı olarak hücrenin "Değer DOĞRU" veya "Değer YANLIŞ" ifadesini görüntüleyeceğini göreceksiniz.

A1 hücresindeki değer 500 olduğundan formülümüzü girdiğimiz A3 hücresinde çıktı “Değer DOĞRU” olur.
KODUN TAMAMI
Function TestLogicalValue(value As Boolean) As String
If value = True Then
TestLogicalValue = “Value is TRUE”
Else
TestLogicalValue = “Value is FALSE”
End If
End Function
Örnek 3
Bu örnekte, bir dikdörtgenin alanını hesaplayan bir fonksiyon oluşturacağız.
- Adım 1: Yeni Modülde, iki argüman alan “CalculateRectangleArea” adlı UDF'yi bildirir: “length” ve “width”, her ikisi de Double türündedir. Ayrıca, işlevin dikdörtgenin alanını temsil eden Double türünde bir değer döndüreceğini belirtir.

- Adım 2: Şimdi, Double türünden “area” adlı bir değişken bildirin. Dikdörtgenin hesaplanan alanını depolamak için kullanılacaktır.

- Adım 3: Şimdi uzunluk ve genişlik argümanlarını çarparak dikdörtgenin alanını hesaplayan bir değişken atayalım.

Bu satır, “area” değişkeninin değerini UDF'nin adı olan “CalculateRectangleArea”ya atar. Daha sonra, fonksiyonun dönüş değerini hesaplanan alana ayarlar.
- Adım 4: Modülü kaydedin ve VBA'yı kapatın.
Herhangi bir hücreye, dikdörtgenin uzunluğunun A1 hücresinde, genişliğinin ise B1 hücresinde olduğunu varsayarak =CalculateRectangleArea(A1, B1) formülünü girin.

- Adım 5: Formülü çalıştırmak için enter'a bastığınızda, hücre A1 ve B1 hücrelerindeki değerlere göre dikdörtgenin hesaplanan alanını görüntüler.

Dim area As Double
area = length * width
CalculateRectangleArea = area
End Function
