Bu eğitim size VBA'da parametreli ve parametresiz işlevler oluşturmayı ve kullanmayı öğretecektir.
VBA, kullanmanız için çok sayıda yerleşik işlev içerir, ancak kendinizinkini de yazabilirsiniz. VBA'da kod yazdığınızda, bunu bir Alt Prosedürde veya bir İşlev Prosedüründe yazabilirsiniz. Bir İşlev Prosedürü, kodunuza bir değer döndürebilir. Bu, VBA'nın bir sonuç döndürmek için bir görev gerçekleştirmesini istiyorsanız son derece kullanışlıdır. VBA işlevleri, Excel'in yerleşik Excel işlevleri gibi Excel'in içinden de çağrılabilir.
Argümansız Bir Fonksiyon Yaratmak
Bir fonksiyon yaratmak için fonksiyona bir isim vererek fonksiyonu tanımlamanız gerekir. İşlev, daha sonra, işlevin döndürmesini istediğiniz veri türünü gösteren bir veri türü olarak tanımlanabilir.
Her çağrıldığında statik bir değer döndüren bir işlev oluşturmak isteyebilirsiniz - biraz sabit gibi.
123 | Tamsayı Olarak GetValue() işleviGetDeğeri = 50Bitiş İşlevi |
İşlevi çalıştıracak olsaydınız, işlev her zaman 50 değerini döndürür.
VBA'da nesnelere başvuran işlevler de oluşturabilirsiniz, ancak işlevden değeri döndürmek için Anahtar Sözcüğü Ayarla'yı kullanmanız gerekir.
123 | Aralık olarak GetRange() işleviGetRange = Aralık ("A1:G4") olarak ayarlayınBitiş İşlevi |
Yukarıdaki işlevi VBA kodunuzda kullanacak olsaydınız, işlev her zaman hangi sayfada çalışıyor olursanız olun A1 ila G4 hücre aralığını döndürür.
Bir Alt Prosedürden Bir Fonksiyonu Çağırmak
Bir işlev oluşturduğunuzda, işlevi çağırmak için bir Alt Yordam kullanarak onu kodunuzdaki herhangi bir yerden arayabilirsiniz.
50 değeri her zaman döndürülür.
GetRange işlevini bir Alt Yordamdan da çağırabilirsiniz.
Yukarıdaki örnekte, GetRange İşlevi, aralık nesnesindeki hücreleri kalınlaştırmak için Alt Yordam tarafından çağrılır.
Fonksiyonlar Oluşturma
Tek Argüman
Ayrıca işlevinize bir parametre veya parametre atayabilirsiniz. Bu parametreler Argümanlar olarak adlandırılabilir.
123 | ConvertKilosToPounds (dblKilo as Double) işlevi Double olarakConvertKiloToPounds = dblKilo*2.2Bitiş İşlevi |
Daha sonra, belirli bir kilo miktarının kaç pound olduğunu bulmak için bir Alt Prosedürden yukarıdaki işlevi çağırabiliriz.
Gerekirse VBA kodunuzdaki birden çok prosedürden bir işlev çağrılabilir. Bu, aynı kodu tekrar tekrar yazmak zorunda kalmanızı engellemesi açısından çok kullanışlıdır. Ayrıca, uzun prosedürleri küçük yönetilebilir işlevlere bölmenizi sağlar.
Yukarıdaki örnekte, 2 prosedürümüz var - her biri, kendilerine verilen kiloların pound değerini hesaplamak için Fonksiyonu kullanıyor. dblKilo Fonksiyonun argümanı.
Çoklu Argümanlar
Birden çok bağımsız değişken içeren bir İşlev oluşturabilir ve değerleri bir Alt Yordam yoluyla İşlev'e iletebilirsiniz.
123 | İşlev HesaplaDayDiff(Date1 as Date, Date2 as Date) Double olarakHesaplaDayDiff = Tarih2-Tarih1Bitiş İşlevi |
Daha sonra 2 tarih arasındaki gün miktarını hesaplamak için fonksiyonu çağırabiliriz.
İsteğe Bağlı Bağımsız Değişkenler
İsteğe bağlı bağımsız değişkenleri bir İşleve de iletebilirsiniz. Başka bir deyişle, bazen argümana ihtiyacınız olabilir ve bazen olmayabilir - İşlevi hangi kodla kullandığınıza bağlı olarak .
123456 | İşlev HesaplaDayDiff(Tarih1 olarak Tarih, İsteğe Bağlı Tarih2 Tarih olarak) Double olarak'ikinci tarihi kontrol edin ve orada değilse, Date2'yi bugünün tarihine eşit yapın.Date2=0 ise Date2 = Datefarkı hesaplaHesaplaDayDiff = Tarih2-Tarih1Bitiş İşlevi |
Varsayılan Bağımsız Değişken Değeri
Ayrıca, işlevi oluştururken İsteğe bağlı bağımsız değişkenlerin varsayılan değerini ayarlayabilirsiniz, böylece kullanıcı bağımsız değişkeni atlarsa, bunun yerine varsayılan olarak koyduğunuz değer kullanılır.
1234 | İşlev HesaplaDayDiff(Tarih1 olarak Tarih, İsteğe Bağlı Date2 as Date="06/02/2020") Double olarakfarkı hesaplaHesaplaDayDiff = Tarih2-Tarih1Bitiş İşlevi |
ByVal ve ByRef
Değerleri bir fonksiyona ilettiğinizde, ByVal veya ByRef anahtar kelimeler. Bunlardan herhangi birini atlarsanız, ByRef varsayılan olarak kullanılır.
ByVal değişkenin bir kopyasını işleve geçirdiğiniz anlamına gelir, oysa ByRef değişkenin orijinal değerine atıfta bulunduğunuz anlamına gelir. Değişkenin bir kopyasını ilettiğinizde (ByVal), değişkenin orijinal değeri OLUMSUZ değişti, ancak değişkene başvurduğunuzda, değişkenin orijinal değeri işlev tarafından değiştirilir.
1234 | Fonksiyon GetValue(ByRef intA As Integer) As IntegerintA = intA * 4GetValue = intABitiş İşlevi |
Yukarıdaki fonksiyonda ByRef atlanabilir ve fonksiyon aynı şekilde çalışır.
1234 | Fonksiyon GetValue(intA As Integer) As IntegerintA = intA * 4GetValue = intABitiş İşlevi |
Bu işlevi çağırmak için bir alt prosedür çalıştırabiliriz.
123456789 | Alt TestValues()IntVal As Integer'değişkeni 10 değeriyle doldurunintDeğer = 10'GetValue işlevini çalıştırın ve değeri hemen pencerede gösterinDebug.Print GetValue(intVal)'intVal değişkeninin değerini hemen pencerede gösterDebug.Print intValAlt Bitiş |
Hata ayıklama pencerelerinin her iki seferde de 40 değerini gösterdiğine dikkat edin. IntVal değişkenini işleve ilettiğinizde - 10 değeri işleve iletilir ve 4 ile çarpılır. ByRef anahtar sözcüğünü kullanmak (veya tamamen atlamak), IntVal değişkeninin değerini DEĞİŞTİRİR. Bu, önce hemen pencerede (40) işlevin sonucunu ve ardından hata ayıklama penceresinde (ayrıca 40) IntVal değişkeninin değerini gösterdiğinizde gösterilir.
Orijinal değişkenin değerini değiştirmek istemiyorsak, fonksiyonda ByVal kullanmalıyız.
1234 | Fonksiyon GetValue(ByVal intA As Integer) As IntegerintA = intA * 4GetValue = intABitiş İşlevi |
Şimdi fonksiyonu bir alt prosedürden çağırırsak, IntVal değişkeninin değeri 10'da kalacaktır.
Çıkış Fonksiyonu
Belirli bir koşulu test eden bir işlev oluşturursanız ve koşulun doğru olduğu bulunduğunda, işlevden değeri döndürmek istiyorsanız, işlevden daha önce çıkmak için İşlevinize bir Çıkış İşlevi ifadesi eklemeniz gerekebilir. bu fonksiyondaki tüm kodu çalıştırdınız.
12345678910111213 | Tamsayı Olarak FindNumber(strSearch As String) İşleviDim i Tamsayı Olarak'dizedeki her harf arasında dolaşıni = 1 için Len(strSearch)'harf sayısal ise, değeri işleve döndürIsNumeric(Mid(strSearch, i, 1)) iseFindNumber= Orta(strSearch, i, 1)'sonra fonksiyondan çıkınÇıkış FonksiyonuBitirSonrakiBulNumara= 0Bitiş İşlevi |
Yukarıdaki işlev, bir sayı bulana kadar sağlanan dize boyunca dönecek ve ardından bu sayıyı dizeden döndürecektir. O zaman olduğu gibi dizedeki yalnızca ilk sayıyı bulacaktır. çıkış işlev.
Yukarıdaki işlev, aşağıdaki gibi bir Alt rutin tarafından çağrılabilir.
1234567 | Alt CheckForNumber()Tamsayı olarak Dim NumIs'sayı bulma işlevine bir metin dizesi iletinNumIs = FindNumber("Üst Kat, 8 Oak Lane, Teksas")'sonucu hemen pencerede gösterDebug.Print NumIsAlt Bitiş |
Excel Sayfasından İşlev Kullanma
Bir alt prosedür kullanarak VBA kodunuzdan bir işlev çağırmaya ek olarak, işlevi Excel sayfanızdan da çağırabilirsiniz. Oluşturduğunuz işlevler, varsayılan olarak işlev listesinin Kullanıcı Tanımlı bölümündeki işlev listenizde görünmelidir.
Tıkla fx İşlev Ekle iletişim kutusunu göstermek için
Seçme Kullanıcı tanımlı Kategori Listesinden
Mevcut seçeneklerden istediğiniz işlevi seçin. Kullanıcı Tanımlı Fonksiyonlar (UDF'ler).
Alternatif olarak, işlevinizi Excel'de yazmaya başladığınızda, işlev açılır işlevler listesinde görünmelidir.
Fonksiyonun bir Excel sayfasında bulunmasını istemiyorsanız, VBA kodunuzda fonksiyonu oluştururken Fonksiyon kelimesinin önüne Özel kelimesini koymanız gerekir.
123 | Özel Fonksiyon CalculateDayDiff(Date1 as Date, Date2 as Date) Double olarakHesaplaDayDiff = Tarih2-Tarih1Bitiş İşlevi |
Artık mevcut Excel işlevlerini gösteren açılır listede görünmeyecektir.
İlginçtir ki, yine de işlevi kullanabilirsiniz - aradığınızda listede görünmeyecektir!
İkinci argümanı olarak beyan ettiyseniz İsteğe bağlı, VBA kodunun yanı sıra Excel sayfasında da atlayabilirsiniz.
Excel sayfanızda argümanlar olmadan oluşturduğunuz bir işlevi de kullanabilirsiniz.