Skip to content

Makrolar (VBA) ile Excel’de Fonksiyon Yazmak

Makrolar (VBA) ile Excel’de Fonksiyon Yazmak

Bu makalemizde VBA eğitimlerimizde de çok üstünde durduğumuz bir konu olan Makrolar (VBA) ile Excel’de Fonksiyon Yazmak konusunu inceleyeceğiz.

Makrolar (VBA) ile Excel’de Fonksiyon Yazmaya Giriş

Excel’de yerleşik olarak birçok farklı kategoride toplamda 467 tane hazır fonksiyon bulunuyor. Bu fonksiyonlar ile mevcut işlemlerimizi yapmak istediğimizde formülleri kullanıyoruz.

Fakat bazı durumlarda bu fonksiyonlar doğrudan ihtiyaçlarımızı görmeyebilir veya çok fazla sayıda fonksiyonu bir arada kullanarak uzun ve karmaşık bir formül bizim için gerek kurgulanması bakımından gerekse yazılışı bakımından zor olabilir. Örneğin 40 tane eğer fonksiyonunu içiçe yazmak can sıkıcı olabilir.

Böyle durumlarda Excel’de VBA’i yani makroları kullanarak kendimize özel fonksiyonlar yazabiliyoruz.

Makrolar (VBA) ile Excel’de Fonksiyon Yazarak istediğimiz işlevleri rahatlıkla kodlaya biliriz. Üstelik bu fonksiyonları sonra değiştirebiliyor veya istediğimiz kişiler ile kolaylıkla paylaşabiliyoruz.

VBA ile ilgili daha çok bilgiye buradan erişebilirsiniz.

Modül Ekleme ve Kaydetme

Bir fonksiyon yazmak istediğimizde Excel’de kod editörüne geçip Insert sekmesinden bir Modül eklememiz gerekiyor.

Vba Editör - Makrolar (VBA) ile Excel’de Fonksiyon Yazmak
Vba Editör

Fonksiyonlar sayfalara yazılabilir ve kullanılırlar fakat Excel ara yüzünde eşittir (=) işaretini koyup fonksiyonun adını yazdığımızda fonksiyonun diğer yerleşik fonksiyonlar gibi çıkmasını istiyorsak kesinlikle fonksiyonumuzu bir modül’e yazmamız gerekiyor. Bir modüle birden fazla fonksiyon yazılabilir.

İçindeki modüllerde fonksiyon bulunan Excel belgelerini .xlsm (Makro İçerebilen Excel Çalışma Kitabı) uzantısı ile kaydedip bu belgeleri gönderdiğiniz herkes kullanabilir.

Fakat fonksiyon modülde olduğu sürece sadece o Excel çalışma kitabında çalışır başka bir Excel belgesinde = (eşittir) dediğinizde çıkmaz o yüzden fonksiyonlarımızı modül’e yazdıktan sonra belgede Farklı Kaydet diyerek fonksiyonu .xlam (Excel Eklentisi) olarak Excel’in varsayılan “C:UsersCihanAppDataRoamingMicrosoftAddIns” fonksiyon klasörüne kaydederiz.

Addins Klasörü - Makrolar (VBA) ile Excel’de Fonksiyon Yazmak
Addins Klasörü

Farklı bir adrese de kaydedebilirsiniz fakat o fonksiyonu her defasında göstermek zorunda kalabilirsiniz örneğin Excel’i açtığınızda ilk bakacağı yer AddIns klasörü olduğu için buraya kaydetmenizi tavsiye ederim.

Excel’deki fonksiyonlar aşağıdaki şekilde görünür. Bu tarz Excel dosyaları çift tıklanarak açılmazlar, bunlar bir klasöre yüklenir ve kullanılırlar.

Fonksiyon dosyasının adı ile fonksiyonun adı aynı olmak zorunda da değildir. Bir fonksiyon dosyasında birden fazla farklı isimde fonksiyonlar da bulunabilir.

.xlam dosyalarını Excel’den Çağırmak

Fonksiyon Dosyası - Makrolar (VBA) ile Excel’de Fonksiyon Yazmak
Fonksiyon Dosyası

Eğer başka bir konuma kaydeder iseniz Excel ara yüzünde =(eşittir) dediğinizde çıkmayacaktır böyle bir durumda da Geliştirici sekmesindeki Excel Eklentilerinden eklemeniz gerekecektir.

Geliştirici Sekmesi
Geliştirici Sekmesi

Geliştirici sekmesinden Excel eklentilerine tıkladığınızda açılan pencereden ilgili fonksiyonun onay kutusunu işaretleyip tamam dedikten sonra Excel’de kullanılabilir.

Eklenti aktif etmek
Eklenti aktif etmek
Fonksiyon Çağırmak
Fonksiyon Çağırmak

Evet şimdi gelelim fonksiyonumuzu yazmayaJ

Fonksiyon yazmak için modül’ümüze gidiyoruz ve Function kelimesi ile yazmaya başlıyoruz. Fonksiyon yazarken sayı ve karakter ile başlamıyoruz, boşluk koymuyoruz ve 255 karakterden uzun bir isim vermiyoruz.

Fonksiyon Yazımı

Function TCkontrol()


‘ VBA Kodları


End Function

Fonksiyonu yazdığımızda fonksiyon adının yanındaki parantez içine bir şey yazmaz iseniz fonksiyon parametre almayan fonksiyondur. Örneğin Excel’in yerleşik fonksiyonları olan Bugün, Şimdi, Pi gibi fonksiyonlar parametre almazlar.

Eğer bir parametre gönderecek isek parantez içinde aralarında virgüllerle ayırarak bu parametreleri tipleri ile belirleyebiliriz. Biz örneğimizde T.C. kimlik numarasını göndereceğiz ve bu T.C. kimlik numarasının doğru olup olmadığını arka planda yapacağı bir hesaplama ile bize doğru veya yanlış şeklide döndürecek bir fonksiyon yazacağız.

Fonksiyona göndereceğimiz TC numarasını fonksiyona metin gibi gönderip sonra her bir karakterini sırayla parçalarına ayıracağız. Daha sonra bu parçalardan bir matematiksel hesap ile 10 haneyi biz bulacağız akabinde 11 haneyi de yine ilk 10 haneden kendimiz elde edeceğiz.

Ve Excel’den gelen TC numarasının 10. ve 11. Hanelerinin benim bulduğum 10 ve 11. Hanelere aynı anda eşit olması durumda TC kimlik numarasının doğru olduğunu saptamış olacağız ve sonuç olarak doğru göndereceğiz aksi durumda yanlış bilgisini göndereceğiz.

Örnek bir fonksiyon: TCKontrol

Function TCKontrol(ByVal tc As String) As Boolean
Dim tc1 As Integer
Dim tc2 As Integer
Dim tc3 As Integer
Dim tc4 As Integer
Dim tc5 As Integer
Dim tc6 As Integer
Dim tc7 As Integer
Dim tc8 As Integer
Dim tc9 As Integer
Dim tc10 As Integer
Dim tc11 As Integer
Dim tc10x As Integer
Dim tc11x As Integer
tc1 = Mid(tc, 1, 1)
tc2 = Mid(tc, 2, 1)
tc3 = Mid(tc, 3, 1)
tc4 = Mid(tc, 4, 1)
tc5 = Mid(tc, 5, 1)
tc6 = Mid(tc, 6, 1)
tc7 = Mid(tc, 7, 1)
tc8 = Mid(tc, 8, 1)
tc9 = Mid(tc, 9, 1)
tc10 = Mid(tc, 10, 1)
tc11 = Mid(tc, 11, 1)
tc10x = ((tc1 + tc3 + tc5 + tc7 + tc9) * 7 – (tc2 + tc4 + tc6 + tc8)) Mod 10
tc11x = (tc1 + tc2 + tc3 + tc4 + tc5 + tc6 + tc7 + tc8 + tc9 + tc10x) Mod 10
If tc10 = tc10x And tc11 = tc11x Then
TCKontrol = True
Else
TCKontrol = False
End If
End Function

Yukarda bulunan fonksiyona Excel ara yüzünden TC numaralarını göndereceğiz ve bu ilgili işlemleri yaptıktan sonra bizlere TC’nin doğru olup olmadığını gönderecektir.

Peki başka neler biliyoruz?

  • Örneğin TC numaraları 11 hane olmak zorundadır.

  • ilk 9 hane elimizde ise 10 ve 11. Haneleri bulabiliriz.

  • TC numaraları kesinlikle çift sayı ile biter. (0,2,4,6,8)

  • 11 hanenin hepsi de rakam olmak zorundadır.

O zaman bu kodu geliştirebiliriz. Örneğin karakter uzunluğu 11 haneden farklı ise hata yazdırabiliriz veya sadece rakamlardan oluşmuyorsa ya da son hanesi çift değilse hiç kontrole girmeden doğrudan hata sonucunu ekrana yazabiliriz.

Fonksiyonumuzu yazdık ve ülkemizde herkesin kullanacağı bir fonksiyon olduğu için istediğimiz kişilerle paylaşabiliriz. Dilerseniz kod kısmına geçip yeni kod ilaveleri yapabilir ve yine aynı isimle aynı şekilde kullanabiliriz. Makrolar (VBA) ile Excel’de Fonksiyon yazmanın güçlü yanlarını gördükçe sürekli yeni fonksiyonlar üreteceksiniz.

Yazdığımız fonksiyonları diğer Excel fonksiyonları içinde kullanabiliriz vb. birçok işlemi kolaylıkla yapabiliriz. Fonksiyonların en büyük avantajlarından biride hızlarıdır. Oldukça verimli ve hızlı çalışmaları sayesinde işlemleri kısa sürelerde halledebiliriz.

Excel'de tanımlı fonksiyon kullanmak
Excel’de tanımlı fonksiyon kullanmak

Yukardaki fonksiyon örneğinde görüldüğü üzere Makrolar (VBA) ile Excel’de Fonksiyon kullanarak istediğimiz gibi esnetip şekillendirebiliyoruz. Bu esneklik bizlere daha fazla ve doğru iş yapma olanağı sağlıyor.

İşlem Ekle ile fonksiyon çağırmak

Excel’de F(x) işaretine tıkladığınızda açılan pencerede Kategori seçerken Kullanıcı Tanımlı dediğinizde kendi yazmış olduğunuz fonksiyonları da görmeniz mümkündür.

İşlev Ekle
İşlev Ekle

Görüldüğü gibi Makrolar (VBA) ile Excel’de Fonksiyon yazmak oldukça kolay ve kullanışlıdır. Özellikle Makrolar (VBA) ile Excel’de Fonksiyon yazmayı tüm Excel kullanıcılarına öneriyorum.

Bir önceki makalemde ilginizi çekebilir:

https://www.peakup.org/blog/application-worksheetfunction-ile-vbade-vlookup-fonksiyonunu-kullanmak/

Diğer makalelerime buradan erişebilirsiniz.

Bir başka makalede görüşmek üzere,

Hoşçakalın.