- Katılım
- 25 May 2018
- Mesajlar
- 1,601
- En iyi yanıt
- 14
- Puanları
- 113
- Konum
- İstanbul
- Web sitesi
- excelarsivi.com
- Ad Soyad
- Murat OSMA
- Office Vers.
- Office 365 TR+EN
Excel'in yerleşik işlevleri (formüller) yetersiz kaldığında kendi işlevlerinizi oluşturmanıza olanak tanır, bunlar Kullanıcı Tanımlı İşlevler veya KTF'ler (User Defined Functions) olarak bilinir. Bu işlev, programınızda herhangi bir yerden çağrılabilen yeniden kullanılabilir kod grubudur.
Aynı kodu tekrar tekrar yazma ihtiyacını ortadan kaldırır. Programcıların büyük bir programı bir dizi küçük ve yönetilebilir fonksiyona bölmelerini sağlar.
Bir KTF oluşturarak, Excel'in işlevselliğini daha da artırabilirsiniz.
Bu arada KTF'ler birçok yazılım dilinde oluşturulabilir fakat biz sadece VBA tarafına bakacağız.
Çoğunlukla VBA'ya makro yazmak için başvururuz, ancak genellikle Makro ve KTF olarak adlandırdığımız şey arasında bazı önemli farklar vardır.
Birincil ayrım, bir fonksiyonun bir değer döndürmesidir. Başka bir deyişle, bir tür hesaplama yapar ve sonucu çalışma sayfasına döndürür.
Bir makro elbette hesaplamaları yapabilir, ancak sonuçlar bir işlevle aynı şekilde Excel'e geri gönderilmez.
Makro, bir sayfa veya çalışma kitabındaki yapıyı ve biçimlendirmeyi değiştirebilir. Bir işlev yalnızca hesaplamalarının sonucunu, çağrıldığı hücreye geri gönderebilir (HYPERLINK istisnası hariç).
Kendi fonksiyonlarınızı kullanmanın birçok avantajları var. Örneğin KTF'lerle şunları yapabilirsiniz:
KTF Yazımı
KTF'ler kodlarda Function ifadesi ile başlarlar.
KTF'yi yazmadan önce, aynı işi yapan bir makroya bakıp incelemek gerek..
Bu, 'sıradan' bir makro ve KTF arasındaki bazı temel farklılıkları anlamamıza yardımcı olacaktır.
Yazacağımız makro çok basit bir şey yapacak, bize bir sayının karesini verecek.
Bir hücre seçtikten sonra makroyu çalıştırıyoruz.
Seçilen hücrenin Selection.Value ^2 ( değerinin karesini ) sonuç olarak seçili hücrenin 1 sütun sağındaki hücreye yazdı.
Bir dizi rakamımız varsa ve bunların karelerini istiyorsak, bu sayıların her biri için bunu yapmak zorundayız.
Bu kodu bir KTF'ye dönüştürürsek, çalışma kitabımızda başka herhangi bir işlev gibi kullanabiliriz.
Bir cevap istediğimizde kodu manuel olarak çalıştırmamız gerekmez.
Formülü sayfaya kopyalayıp yapıştırabiliriz ve işlevi diğer işlevlerle birlikte içi içe yerleştirebiliriz.
Sayfada kullandığınız fonksiyonların birebir aynısını arka tarafta, kod penceresinde oluşturduğumuz düşünün.
Fonksiyonlarda bizden istenen hangi argümanlar var ise, yine aynı şekilde o argümanları belirtmemiz gerek.
Örneğin; en çok kullanılan ve basit olan Topla fonksiyonu için gerekli olan KTF kalıbı bu şekildedir;
Function Topla(ByVal hücre) As Double
Sayfada Topla fonksiyonunu kullanırken sadece toplam alacağımız alanı, hücreleri seçmemiz yeterliydi.
Burada da aynı mantık geçerli. =Topla("A1:A10") şeklinde hücreye girişini yapıyoruz..
Şimdi gelelim yukarıdaki Karesini_Al prosedürünün KTF olarak çalışması için yazdığımız koda..
Verdiğimiz argüman bir sayı veya bir hücre referansı olabilir. Tam olarak Excel işlevi ile aynı şekilde yerleşik olarak çalışır.
Sonuç, bu hesaplamanın sonucunu, Karesi olan işlevin adına atayarak bu şekilde Excel'e geri gönderilir.
Şimdi bu oluşturulan basit KTF'yi hücrede nasıl kullanabiliriz ona bakalım.
Şimdi bir başka örnek verelim.
Excel'de olmayan bir hesaplamayı Fonksiyon olarak Excel'de kullanılmasını sağlayalım.
Örneğin; KDV adında bir KTF'oluşturup %18 KDV'sini hesaplattırıp bunu hücrede kullanalım.
Yazacağımız KTF kalıbı bu şekilde olacak..
Bu kalıbı da KDV hesaplama formülü ile tamamladığımızda işimiz bitmiş olacak.
Şimdi hücrede
Birden Fazla Argüman Kullanarak KTF Hazırlamak
Az önce yazdığımız KDV fonksiyonundaki sabit olan oranı parametrik olarak ayarlayalım. Yani Tutarı da Oranı da hücreden seçtirelim.
Sayfadaki formüllerde bazen bizden birden fazla argüman istenir ve bu argümanların da aralarında ; (noktalı virgül) işaretleri vardır. Her bir argüman ; işareti ile ayrılmıştır. KTF'de de yine her bir argümanı , (virgül) işaretiyle ayıracağız. Sayfada argümanları ayırmak için ; (noktalı birgül) konur, VBA tarafında ise , (virgül) kullanılır.
Hem Tutar, hem de Oran kısmını hücreden aldırmak istersek, KTF'mizi bu şekilde yazabiliriz.
Formülü:
Hücrde kullanımı bu şekildedir;
devamı gelecek..
Aynı kodu tekrar tekrar yazma ihtiyacını ortadan kaldırır. Programcıların büyük bir programı bir dizi küçük ve yönetilebilir fonksiyona bölmelerini sağlar.
Bir KTF oluşturarak, Excel'in işlevselliğini daha da artırabilirsiniz.
Bu arada KTF'ler birçok yazılım dilinde oluşturulabilir fakat biz sadece VBA tarafına bakacağız.
Çoğunlukla VBA'ya makro yazmak için başvururuz, ancak genellikle Makro ve KTF olarak adlandırdığımız şey arasında bazı önemli farklar vardır.
Birincil ayrım, bir fonksiyonun bir değer döndürmesidir. Başka bir deyişle, bir tür hesaplama yapar ve sonucu çalışma sayfasına döndürür.
Bir makro elbette hesaplamaları yapabilir, ancak sonuçlar bir işlevle aynı şekilde Excel'e geri gönderilmez.
Makro, bir sayfa veya çalışma kitabındaki yapıyı ve biçimlendirmeyi değiştirebilir. Bir işlev yalnızca hesaplamalarının sonucunu, çağrıldığı hücreye geri gönderebilir (HYPERLINK istisnası hariç).
Kendi fonksiyonlarınızı kullanmanın birçok avantajları var. Örneğin KTF'lerle şunları yapabilirsiniz:
- Kendi özel matematik / mühendislik / istatistik / dize işlevlerinizi oluşturun.
- Karmaşık, iç içe formülleri basitleştirin.
KTF Yazımı
KTF'ler kodlarda Function ifadesi ile başlarlar.
KTF'yi yazmadan önce, aynı işi yapan bir makroya bakıp incelemek gerek..
Bu, 'sıradan' bir makro ve KTF arasındaki bazı temel farklılıkları anlamamıza yardımcı olacaktır.
Yazacağımız makro çok basit bir şey yapacak, bize bir sayının karesini verecek.
PHP:
Sub Karesini_Al()
Selection.Offset(, 1).Value = Selection.Value ^ 2
End Sub
Seçilen hücrenin Selection.Value ^2 ( değerinin karesini ) sonuç olarak seçili hücrenin 1 sütun sağındaki hücreye yazdı.
Bir dizi rakamımız varsa ve bunların karelerini istiyorsak, bu sayıların her biri için bunu yapmak zorundayız.
Bu kodu bir KTF'ye dönüştürürsek, çalışma kitabımızda başka herhangi bir işlev gibi kullanabiliriz.
Bir cevap istediğimizde kodu manuel olarak çalıştırmamız gerekmez.
Formülü sayfaya kopyalayıp yapıştırabiliriz ve işlevi diğer işlevlerle birlikte içi içe yerleştirebiliriz.
Sayfada kullandığınız fonksiyonların birebir aynısını arka tarafta, kod penceresinde oluşturduğumuz düşünün.
Fonksiyonlarda bizden istenen hangi argümanlar var ise, yine aynı şekilde o argümanları belirtmemiz gerek.
Örneğin; en çok kullanılan ve basit olan Topla fonksiyonu için gerekli olan KTF kalıbı bu şekildedir;
Function Topla(ByVal hücre) As Double
Sayfada Topla fonksiyonunu kullanırken sadece toplam alacağımız alanı, hücreleri seçmemiz yeterliydi.
Burada da aynı mantık geçerli. =Topla("A1:A10") şeklinde hücreye girişini yapıyoruz..
Şimdi gelelim yukarıdaki Karesini_Al prosedürünün KTF olarak çalışması için yazdığımız koda..
PHP:
Function Karesi(ByVal sayi As Single) As Single
Karesi = sayi ^ 2
End Function
Verdiğimiz argüman bir sayı veya bir hücre referansı olabilir. Tam olarak Excel işlevi ile aynı şekilde yerleşik olarak çalışır.
Sonuç, bu hesaplamanın sonucunu, Karesi olan işlevin adına atayarak bu şekilde Excel'e geri gönderilir.
Kare = sayi ^ 2
Şimdi bu oluşturulan basit KTF'yi hücrede nasıl kullanabiliriz ona bakalım.
=Karesi(4)
veya hücre referansıyla =Karesi("A1")
Şimdi bir başka örnek verelim.
Excel'de olmayan bir hesaplamayı Fonksiyon olarak Excel'de kullanılmasını sağlayalım.
Örneğin; KDV adında bir KTF'oluşturup %18 KDV'sini hesaplattırıp bunu hücrede kullanalım.
Yazacağımız KTF kalıbı bu şekilde olacak..
Function KDV(ByVal Tutar As Double) As Double
Bu kalıbı da KDV hesaplama formülü ile tamamladığımızda işimiz bitmiş olacak.
PHP:
Function KDV(ByVal Tutar As Double) As Double
KDV = Tutar * 18 / 100
End Function
=KDV(A1)
olarak kullanabiliriz.Birden Fazla Argüman Kullanarak KTF Hazırlamak
Az önce yazdığımız KDV fonksiyonundaki sabit olan oranı parametrik olarak ayarlayalım. Yani Tutarı da Oranı da hücreden seçtirelim.
Sayfadaki formüllerde bazen bizden birden fazla argüman istenir ve bu argümanların da aralarında ; (noktalı virgül) işaretleri vardır. Her bir argüman ; işareti ile ayrılmıştır. KTF'de de yine her bir argümanı , (virgül) işaretiyle ayıracağız. Sayfada argümanları ayırmak için ; (noktalı birgül) konur, VBA tarafında ise , (virgül) kullanılır.
Hem Tutar, hem de Oran kısmını hücreden aldırmak istersek, KTF'mizi bu şekilde yazabiliriz.
Formülü:
Tutar * Oran / 100
PHP:
Function KDV(ByVal Tutar As Double, ByVal Oran As Double) As Double
KDV = Tutar * Oran / 100
End Function
PHP:
=KDV(A1;B1)
devamı gelecek..