İçindekiler
Kullanıcı tanımlı fonksiyonlarla ilgili eğitim serisine devam ediyoruz. Önceki makalelerimizde, özel fonksiyonlarla tanıştık ve bunları nasıl oluşturup kullanacağımızı öğrendik. Bu kılavuzda, bu fonksiyonları kullanmanın ayrıntılarına bakacağız ve UDF'ler ile VBA makroları arasındaki farkları göreceğiz.
Bu eğitimde aşağıdakileri öğreneceğiz:
Bu makalenin UDF hakkındaki bilgilerinizi artıracağını ve bunları Excel çalışma kitaplarınızda daha da etkili bir şekilde kullanmanıza yardımcı olacağını umuyoruz.
UDF ve Makro aynı şey midir?
Hem kullanıcı tanımlı fonksiyonlar hem de VBA makroları VBA editörü kullanılarak oluşturulur. Aralarındaki fark nedir ve hangisini tercih etmeliyiz?
En önemli fark, işlevin hesaplamayı gerçekleştirmesi ve makronun bazı eylemleri gerçekleştirmesidir. Kullanıcı tanımlı bir işlev, normal bir Excel işlevi gibi, bir hücreye yazılmalıdır. Yürütülmesinin bir sonucu olarak, hücre bir değer döndürür. Aynı zamanda, diğer hücrelerin değerlerini ve mevcut hücrenin bazı özelliklerini değiştirmek imkansızdır (özellikle,biçimlendirme). Ancak, koşullu biçimlendirme formüllerinde özel bir işlev kullanabilirsiniz.
UDF ve VBA makrosu farklı şekillerde çalışır. Örneğin, Visual Basic Düzenleyicisi'nde bir UDF oluşturduğunuzda, bir deyimle başlarsınız Fonksiyon ve son olarak Fonksiyonu Sonlandır . Bir makro kaydettiğinizde, bir ifade ile başlarsınız Alt ve son olarak End Sub.
Tüm Visual Basic işleçleri UDF'ler oluşturmak için kullanılamaz. Bu nedenle, makro daha çok yönlü bir çözümdür.
Bir makro, kullanıcı tanımlı bir fonksiyondan farklı olarak kullanıcının herhangi bir argüman iletmesini gerektirmez (herhangi bir argüman da kabul edemez).
Mesele şu ki, makroların bazı komutları hücre adreslerini veya biçimlendirme öğelerini (örneğin, renk) kullanabilir. Hücreleri taşırsanız, satır ve sütun ekler veya çıkarırsanız, hücrelerin biçimini değiştirirseniz, makrolarınızı kolayca "bozabilirsiniz". Bu, özellikle dosyanızı makrolarınızın nasıl çalıştığını bilmeyen iş arkadaşlarınızla paylaşıyorsanız mümkündür.
Örneğin, mükemmel çalışan bir makro içeren bir dosyanız var. Bu formül A1 ile A4 arasındaki hücrelerin yüzdesini hesaplar. Makro bu hücrelerin rengini sarıya çevirir. Etkin hücrede bir yüzde biçimi ayarlanır.
Siz veya başka biri yeni bir satır eklemeye karar verirse, makro A4 hücresindeki değeri (UDF'nizdeki 4,1 parametresi) aramaya devam edecek, başarısız olacak ve bir hata döndürecektir:
Bu durumda, hata sıfıra bölme nedeniyle meydana gelmiştir (yeni eklenen satırda değer yoktur). Makronun diyelim ki toplama işlemi yapması durumunda, basitçe yanlış bir sonuç alırsınız. Ancak bunu bilemezsiniz.
Makroların aksine, kullanıcı tanımlı fonksiyonlar böyle tatsız bir duruma neden olamaz.
Aşağıda, bir UDF kullanarak aynı hesaplamaların performansını görüyorsunuz. Burada, giriş hücrelerini çalışma sayfasında herhangi bir yerde belirtebilirsiniz ve değiştirirken beklenmedik sorunlarla karşılaşmazsınız.
Aşağıdaki formülü C3'te yazdım:
=UDF_vs_Macro(A1,A4)
Sonra boş bir satır ekledim ve formül yukarıdaki ekran görüntüsünde görebileceğiniz gibi değişti.
Artık bir girdi hücresini veya fonksiyon içeren bir hücreyi herhangi bir yere taşıyabiliriz. Sonuç her zaman doğru olacaktır.
UDF'leri kullanmanın ek bir avantajı da giriş hücresindeki değer değiştiğinde otomatik olarak güncellenmeleridir. Makroları kullanırken her zaman tüm verilerin güncel olduğundan emin olmalısınız.
Bu örneği aklımda tutarak, mümkün olan her yerde UDF'leri kullanmayı ve makroları yalnızca diğer hesaplama dışı faaliyetler için kullanmayı tercih ederim.
UDF kullanmanın sınırlamaları ve dezavantajları
UDF'nin avantajlarından yukarıda bahsetmiştim. Uzun lafın kısası, standart Excel fonksiyonları ile mümkün olmayan hesaplamaları gerçekleştirebilir. Ayrıca, uzun ve karmaşık formülleri kaydedip kullanabilir ve bunları tek bir fonksiyona dönüştürebilir. Böylece karmaşık formülleri tekrar tekrar yazmak zorunda kalmazsınız.
Şimdi UDF'nin eksiklikleri hakkında daha ayrıntılı konuşalım:
- UDF'lerin oluşturulması VBA kullanımını gerektirir. Bunun bir yolu yoktur. Bu, kullanıcının UDF'yi bir Excel makrosuyla aynı şekilde kaydedemeyeceği anlamına gelir. UDF'yi kendiniz oluşturmanız gerekir. Ancak, önceden kaydedilmiş makro kodunun bazı bölümlerini kopyalayıp işlevinize yapıştırabilirsiniz. Sadece özel işlevlerin sınırlamalarının farkında olmanız gerekir.
- UDF'nin bir diğer dezavantajı, diğer Excel işlevleri gibi bir hücreye yalnızca tek bir değer veya bir dizi değer döndürebilmesidir. Yalnızca hesaplamalar yapar, başka bir şey yapmaz.
- Çalışma kitabınızı iş arkadaşlarınızla paylaşmak istiyorsanız, UDF'lerinizi aynı dosyaya kaydettiğinizden emin olun. Aksi takdirde, özel işlevleriniz onlar için çalışmayacaktır.
- VBA düzenleyicisi ile oluşturulan özel fonksiyonlar normal fonksiyonlardan daha yavaştır. Bu özellikle büyük tablolarda fark edilir. Ne yazık ki, VBA şu ana kadar çok yavaş bir programlama dilidir. Bu nedenle, çok fazla veriniz varsa, mümkün olduğunca standart fonksiyonları kullanmaya çalışın veya LAMBDA fonksiyonunu kullanarak UDF'ler oluşturun.
Özel İşlev Sınırlamaları:
- UDF'ler hesaplama yapmak ve bir değer döndürmek için tasarlanmıştır. Makroların yerine kullanılamazlar.
- Diğer hücrelerin içeriğini değiştiremezler (yalnızca etkin hücre).
- İşlev adları belirli kurallara uymalıdır. Örneğin, yerel bir Excel işlev adıyla veya AB123 gibi bir hücre adresiyle eşleşen bir ad kullanamazsınız.
- Özel fonksiyonunuzun adı boşluk içeremez, ancak alt çizgi karakteri içerebilir. Bununla birlikte, tercih edilen yöntem her yeni kelimenin başında büyük harf kullanmaktır (örneğin, GetMaxBetween).
- Bir UDF, hücreleri çalışma sayfasının diğer alanlarına kopyalayıp yapıştıramaz.
- Etkin çalışma sayfasını değiştiremezler.
- UDF'ler etkin hücredeki biçimlendirmeyi değiştiremez. Farklı değerler görüntülenirken bir hücrenin biçimlendirmesini değiştirmek istiyorsanız koşullu biçimlendirmeyi kullanmalısınız.
- Ek kitaplar açamazlar.
- Application.OnTime kullanarak makroları çalıştırmak için kullanılamazlar.
- Makro kaydedici kullanılarak kullanıcı tanımlı bir işlev oluşturulamaz.
- İşlevler, işlevler listesinde görünmez. Geliştirici> Makrolar Diyalog.
- Fonksiyonlarınız iletişim kutusunda görünecektir ( Insert> Fonksiyon ) ve işlevler listesinde yalnızca şu şekilde bildirilmişlerse Kamu (aksi belirtilmedikçe bu varsayılandır).
- olarak bildirilen tüm fonksiyonlar Özel özellik listesinde görünmeyecektir.
Oldukça yavaş bir işlemin yanı sıra kullanımdaki bazı kısıtlamalar, "Bu özel işlevler ne işe yarıyor?" diye düşünmenize neden olabilir.
Kullanışlı olabilirler ve kendilerine getirilen kısıtlamalara dikkat edersek işe yarayabilirler. UDF'leri nasıl düzgün bir şekilde oluşturacağınızı ve kullanacağınızı öğrenirseniz, işlev kitaplığınızı yazabilirsiniz. Bu, Excel'de verilerle çalışma becerinizi büyük ölçüde artıracaktır.
Bana gelince, özel işlevler büyük zaman tasarrufu sağlıyor. Peki ya siz? Kendi UDF'nizi oluşturmayı denediniz mi? Temel Excel işlevlerinden daha çok beğendiniz mi? Yorumlarda tartışalım :)