Bir VBA işlevi bir görevi gerçekleştirmek ve sonucu döndürmek için kullanılır. VBA işlevini kullanarak, Excel'de diğer Excel işlevleri gibi kullanılacak kullanıcı tanımlı bir işlev oluşturabiliriz. Kullanıcıların kompakt bir blokta kod yazmasına, adlandırmasına ve bir değer döndürmesine olanak tanır.
Kullanıcı tanımlı bir fonksiyonun basit bir örneğini görelim. Burada, fonksiyona bir isim verdik ve argüman olarak geçirilen iki sayıyı çarpmak için kullandık. VBA'yı açın, yeni bir modül açmak için Ekle sekmesine tıklayın ve aşağıdaki kodu yazın. Etkin Excel çalışma sayfasına gidin ve tam sayıları çarpmak ve sonucu döndürmek için "Çarpma" fonksiyonunu çağırmak için = operatörünü kullanın.

Multiplication = X * y
End Function
- VBA fonksiyonları Excel'de yerleşik olarak bulunur veya VBA kullanarak sonuç olarak değeri döndürecek bir fonksiyon oluşturabiliriz.
- Fonksiyon genellikle şu şekilde tanımlanır:
Function Function_name(parameter-list)
statement 1
statement 2
……
statement n
End Function
- Fonksiyon oluşturulduktan sonra, fonksiyonu aktif çalışma sayfamıza uygulayabiliriz.
- Kullanıcı tanımlı fonksiyonların yanı sıra, VBA'da Matematik/Trig, Dize/Metin ve Dönüşümler gibi birden fazla yerleşik fonksiyon kategorisi bulunur.
VBA Fonksiyonları Ne İşe Yarar?
- VBA fonksiyonları bir dizi argüman alır, bir görevi gerçekleştirir ve fonksiyon yürütüldükten sonra bir değer döndürür.
- VBA fonksiyonları, SQR gibi içsel fonksiyonlar gibi, kullanıcının bir fonksiyonu özelleştirmesine ve bir ifadenin sağ tarafına yerleştirmesine olanak tanır.
VBA Kullanarak Özel Fonksiyonlar Nasıl Oluşturulur?
Bunu, bazı öğrencilerin toplam notlarını, sonuçlarını ve Notlarını bulmak için bir örnek alarak anlayalım. Toplam notlar, Excel'deki yerleşik SUM işlevi kullanılarak elde edilebilir. Ancak, önce Sonuç ve Not işlevlerinin yazılması gerekir. Nasıl yapıldığını görmek için aşağıdaki adımları izleyin:
Adım 1: Bir Excel çalışma sayfası açın ve verileri aşağıda gösterildiği gibi yazın:

Adım 2: Toplam notları hesaplamak için Excel'in yerleşik İşlevi "SUM"ı kullanın . Bunun için G2 hücresinde =SUM(B2:F2) kullanın ve Enter'a basın. Toplam notları aldıktan sonra, formülü G11'e kadar kalan hücrelere sürükleyin.

Adım 3: Şimdi okulun sonuç için verdiği şu ölçütleri varsayalım:
- Geçme: Öğrencinin 500 üzerinden 200 veya daha fazla toplam not alması.
- Başarısız: Toplam puan 200’ün altında ise.
- Sınav Tekrarı İçin: Bir öğrencinin toplam notunun >200 olduğunu ancak iki veya daha fazla dersten başarısız olduğunu varsayalım.
Bu nedenle VBA’da “ResultOfStudent” adında bir Fonksiyon oluşturmak için aşağıdaki adımları izleyin.
Adım 4: Geliştirici seçeneğine tıklayın ve Visual Basic Application (VBA)'yı seçin. Burada Ekle'ye tıklayın ve yeni bir Modül açın.
Eğer Excel'inizde Geliştirici seçeneği yoksa, Excel'inizde Geliştirici aracını etkinleştirmek için aşağıdaki adımları izleyin.
Excel sayfasını açın ve Excel Şeridi'nin herhangi bir yerine tıklayın. Sonra, " Şeridi Özelleştir" seçeneğini seçin .

“ Şeridi Özelleştir ” seçeneği iletişim kutusunda “ Geliştirici” seçeneğini işaretleyin .

VBA seçeneklerini açmak için “ Geliştirici ” sekmesine gidin ve “ Visual Basic ” seçeneğine tıklayın.

“Visual Basic” seçeneğine tıkladıktan sonra, bir “ Microsoft Visual Basic for Applications ” penceresi açılacaktır. Ardından, “ Ekle ”ye tıklayın ve “ Modül”ü seçin. Son olarak, VBA kodunuzu VBA düzenleyicisine yazmaya hazırsınız .

Şimdi fonksiyon oluşturma adımlarımıza geri dönelim.
Adım 5 : VBA düzenleyicide bir alt prosedürle VBA kodunu yazın. Fonksiyona “ResultOfStudents” adını atayın ve bir sonucu bir dize olarak döndürmesi gerektiğinden bunu bir Dize veri türü olarak tanımlayın.
Ayrıca mycell değişkenlerini Range, Total değişkenini Integer ve CountOfFailedSubjects değişkenini Integer olarak tanımlayın.

Adım 6: Her hücre için not aralığını kontrol etmek için aşağıdaki kodu yazın. Ayrıca, kod ' Toplam' değişkenindeki her hücrenin değerini ekler . Aşağıdaki koşulu yazın:
Hücrenin değeri <35 ise, CountOfFailedSubject değişkenine bir sayısı eklenir.
Adım 7: Aşağıdaki kod, ResultOfStudents fonksiyonu içerisinde Toplam, BaşarısızOlanKonu Sayısı, Sınav Tekrarı, Geçti veya Başarısız değerlerini kontrol eder.
Kod:
Function ResultOfStudents(Marks As Range) As String
Dim mycell As Range
Dim Total As Integer
Dim CountOfFailedSubject As Integer
For Each mycell In Marks
Total = Total + mycell.Value
If mycell.Value < 35 Then CountOfFailedSubject = CountOfFailedSubject + 1 End If Next mycell If Total <= 200 And CountOfFailedSubject >= 2 Then
ResultOfStudents = “Failed “
ElseIf Total >= 200 And CountOfFailedSubject = 0 Then
ResultOfStudents = “Passed”
Else
ResultOfStudents = “Repeat Exam”
End If
End Function

Adım 8: Bu fonksiyonu aktif Excel çalışma sayfamızda uygulayacağız.

Adım 9 : Oluşturulan fonksiyonu girin ve sonucu diğer hücrelere sürükleyin.

Görüldüğü gibi kodumuza ve verilen koşullara göre tüm öğrencilerin sonucu elde edilmiştir.
Bu öğrencilerin notlarını bulmak için “GradeForStudent” adında bir Fonksiyon oluşturuyoruz.
Adım 10: Bir kod yazmadan önce, Notlar için koşulu görmeliyiz. Lütfen aynısı için Tablo.1'e bakın.
Tablo.1: Öğrencilerin Not Alabilme Koşulları.
| Toplam Notlar | Sonuç | Seviye |
|---|---|---|
| 400-450 | Geçti | A |
| 350-400 | Geçti | B |
| 300-350 | Geçti | C |
| 250-300 | Geçti | D |
| 200-250 | Geçti | E |
| <200 | Arızalı | Arızalı |
Adım 11 : Aşağıdaki kodu yazıp çalıştırın.
Kod:
Function GradeForStudent(TotalMarks As Integer, Result As String) As String
If TotalMarks > 450 And TotalMarks <= 500 And (Result = “Passed” Or Result = “Repeat Exam”) Then
GradeForStudent = “A+” ElseIf
TotalMarks > 400 And TotalMarks <= 450 And (Result = “Passed” Or Result = “Repeat Exam”) Then
GradeForStudent = “A” ElseIf
TotalMarks > 350 And TotalMarks <= 400 And (Result = “Passed” Or Result = “Repeat Exam”) Then
GradeForStudent = “B” ElseIf
TotalMarks > 300 And TotalMarks <= 350 And (Result = “Passed” Or Result = “Repeat Exam”) Then
GradeForStudent = “C” ElseIf TotalMarks > 250 And TotalMarks <= 300 And (Result = “Passed” Or Result = “Repeat Exam”) Then
GradeForStudent = “D” ElseIf TotalMarks > 200 And TotalMarks <= 250 And (Result = “Passed” Or Result = “Repeat Exam”) Then
GradeForStudent = “E” ElseIf
TotalMarks < 200 Or Result = “Failed” Then
GradeForStudent = “F”
End If
End Function
Görüldüğü gibi toplam not ve sonuçlar kontrol edilerek notlar buna göre basılmaktadır.
Adım 12: Oluşturulan “GradeOfStudent” fonksiyonunu çalışma sayfamıza uygulayacağız.

Adım 13: Enter'a basın ve formülü diğer hücrelere sürükleyin.

Örnekler
Örnek 1
Bu örnekte “AddThree” adında bir VBA Fonksiyonu oluşturacağız.” Burada, birden fazla sayının bulunduğu listeden istediğimiz üç sayıyı ekleyebiliriz.
Adım 1 : VBA editöründe bir modül açın ve aşağıdaki kodu yazın:

Adım 2: Excel dosyasında “AddThree” fonksiyonunu uygulayın.

Adım 3 : Enter'a basıyoruz ve aşağıdaki görselde görüldüğü gibi üç sayının toplandığını görüyoruz.

Kod:
Function AddThree(X, Y, Z As Integer) As Integer
AddThree = X + Y + Z
End Function
Örnek 2
Bir küboidin uzunluğunu, genişliğini ve yüksekliğini hesaplamak için bir VolumeOfCuboid fonksiyonu oluşturun.
Adım 1: Aşağıdaki kodu VBA Editöründeki Geliştirici sekmesinin altındaki bir modüle yazın.

Adım 2: Aşağıdaki Excel dosyasında yer alan “VolumeOfCuboid” fonksiyonunu uygulayın.

Adım 3 : Girin ve sonucu aşağıda gösterildiği gibi görün. Fonksiyonu bir sonraki hücreye de sürükleyin.

Kod:
Function VolumeOfCuboid(X, Y, Z As Integer) As Integer
VolumeOfCuboid = X * Y * Z
End Function
Örnek 3
Bir metinden sayıları çıkarmak için bir GetNumeric işlevi yazmak. Bir dizi hücre değerimiz olduğunu ve bunlardan yalnızca bir sayı çıkarmak istediğimizi varsayalım. Manuel işlem çok sıkıcı ve zaman alıcı olacaktır. Ancak, bir VBA işlevi olan "GetNumeric" oluşturarak bu işi tek bir tıklamayla gerçekleştirebiliriz.
Adım 1: Aşağıdaki kodu VBA Editör modülüne yazın:

Açıklama:
Function GetNumeric(CellRef As String) As Long
Bu satır “Function” ile başlar ve ardından “GetNumeric” fonksiyon adı gelir. Daha sonra, “CellRef” Long’dan sayısal kısmı çıkaracaktır.
Dim StringLength As Integer
Declares the variable as Integer.
StringLength = Len(CellRef)
Assigns the length to the string.
For X = 1 To StringLength
If IsNumeric(Mid(CellRef, X, 1)) Then Result = Result & Mid(CellRef, X, 1)
Next X
GetNumeric = Result
End Function
IF ifadesi dizenin her karakterini kontrol eder; eğer sayısal bir karakterse, o sayısal karakteri Sonuç değişkenine ekler .
Adım 2: Fonksiyonu Excel sayfasındaki B1 hücresine uygulayın.

Adım3 : Aşağıdaki sonucu görmek için giriş yapın.

Yukarıdaki sonuçta hücrelerden yalnızca sayıların çıkarıldığını görebiliyoruz.
Not: Tüm örneklerin #NAME Hatası, bir Excel hatası olmadan çalışması için , Geliştirici sekmesi altında bir Excel sayfası ve bir VBA modülü açmalıyız. Sağlanan kodu yapıştırın, kodu çalıştırın ve ardından işlevi Excel sayfasına uygulayın. Oluşturulan işlev size istediğiniz sonucu gösterecektir.
Kod :
Function GetNumeric(CellRef As String) As Long
Dim StringLength As Integer
Declares the variable as Integer.
StringLength = Len(CellRef)
Assigns the length to the string.
For X = 1 To StringLength
If IsNumeric(Mid(CellRef, X, 1)) Then Result = Result & Mid(CellRef, X, 1)
Next X
GetNumeric = Result
End Function
Dikkat Edilmesi Gereken Önemli Noktalar
- VBA, farklı görevleri gerçekleştirmek için birden fazla yerleşik işleve sahiptir. Ancak, Excel'de kullanıcı tarafından da yararlı VBA işlevleri (kullanıcı tanımlı işlev) oluşturulabilir.
- Temel VBA fonksiyonlarını oluşturmak için fonksiyona bir isim atayarak tanımlamamız gerekir.
- Bir fonksiyonu tanımlamak için, VBA'da döndürülen sonucun veri türü olan belirli bir veri türünü seçmeliyiz .
- VBA Dize Fonksiyonları, bir karakteri birden fazla kez tekrarlayıp tam olarak aynı dizeyi döndürdüğü için çok önemlidir.
- Dizeleri içeren VBA fonksiyonlarının listesi şunları içerir:
- LEN Fonksiyonu
- SOL İşlevi
- VBA'da RIGHT Fonksiyonu
- MID Fonksiyonu
- TRIM İşlevi
