Excel'de özel işlevlerde nasıl hata ayıklayacağınızı öğrenin

  • Bunu Paylaş
Michael Brown

UDF'lerin nasıl oluşturulacağını zaten bildiğinize göre (ve umarım bunları Excel'inizde uygulamayı da denemişsinizdir), biraz daha derine inelim ve kullanıcı tanımlı işlevinizin çalışmaması durumunda neler yapılabileceğini görelim.

Özel bir fonksiyon oluştururken bazı sorunları çözmek için büyük olasılıkla bir hata ayıklama çalıştırmanız gerekecektir. Böylece fonksiyonun doğru çalıştığından emin olabilirsiniz.

Aşağıdaki hata ayıklama tekniklerini keşfedeceğiz:

    Özel bir işlev oluşturduğunuzda, hata yapma olasılığınız her zaman vardır. Özel işlevler genellikle oldukça karmaşıktır. Ve her zaman hemen doğru şekilde çalışmaya başlamazlar. Formül yanlış bir sonuç veya #VALUE! hatası döndürebilir. Standart Excel işlevlerinin aksine, başka herhangi bir mesaj görmezsiniz.

    Her bir ifadenin nasıl çalıştığını kontrol etmek için özel bir fonksiyonu adım adım incelemenin bir yolu var mı? Elbette! Hata ayıklama bunun için kullanılır.

    Size özel fonksiyonunuzda hata ayıklamak için birkaç yol sunacağım, böylece sizin için uygun olanı seçebilirsiniz.

    Örnek olarak, özel fonksiyonu kullanıyoruz GetMaxBetween önceki makalelerimizden birinden, belirtilen değer aralığındaki maksimum sayıyı hesaplar:

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    İşlev bağımsız değişkenleri, sayıların yazıldığı hücre aralığının yanı sıra değerlerin üst ve alt sınırıdır.

    MsgBox işlevini önemli yerlere yerleştirin

    Hesaplamaların yürütülmesini izlemek için, en önemli değişkenlerin değerlerini ekranda doğru yerlerde görüntüleyebilirsiniz. Bu, açılır iletişim kutuları kullanılarak yapılabilir.

    MsgBox kullanıcıya bir tür mesaj göstermek için kullanabileceğiniz bir iletişim kutusudur.

    MsgBox'ın sözdizimi diğer VBA işlevlerine benzer:

    MsgBox(prompt [, buttons] [, title] [, helpfile, context])

    istemi Gerekli bir bağımsız değişkendir. İletişim kutusunda gördüğünüz mesajı içerir. Ayrıca, tek tek değişkenlerin değerlerini görüntülemek için de kullanılabilir.

    Diğer tüm argümanlar isteğe bağlıdır.

    [ düğmeler ] - hangi düğmelerin ve simgelerin görüntüleneceğini belirler. MsgBox Örneğin, şu seçeneği kullanırsak vbOkOnly sonra sadece TAMAM. düğmesi görüntülenecektir. Bu argümanı atlamış olsanız bile, bu düğme varsayılan olarak kullanılır.

    [ başlık ] - burada mesaj kutusunun başlığını belirleyebilirsiniz.

    Sözcüklerden uygulamaya geçelim ve hata ayıklamaya başlayalım. Mesajı görüntülemek için, aşağıdaki satırı koduna ekleyin GetMaxBetween kullanıcı tanımlı fonksiyondan önce Başka Bir Durum Operatör:

    MsgBox vMax,, "Count -" & i

    İşte sonuçta elde edeceğimiz şey:

    Function GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) For Each NumRange In rngCells vMax = NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween =WorksheetFunction.Max(arrNums) End Fonksiyonu

    Kullanarak vMax değişkeni ile hangi sayıların seçim kriterlerini karşıladığını göreceğiz, böylece içlerinden en büyüğünü seçebileceğiz. Başlık çubuğundaki "Count -" & I ifadesi ile maksimum değeri belirlemek için halihazırda kaç sayı seçtiğimizi belirtiyoruz. Sayaç her yeni değerle birlikte artırılacaktır.

    UDF setimizi oluşturduktan sonra, aşağıdaki formülü tarih aralığına uygularız:

    = GetMaxBetween (A1:A6,10,50)

    Enter düğmesine basıldıktan sonra aşağıdaki ekran görüntüsündeki gibi bir mesaj göreceksiniz:

    Bu, A1: A6 aralığında 10'dan büyük ancak 50'den küçük kriterini karşılayan ilk sayıdır.

    Tamam'a tıkladıktan sonra, 14 sayısını içeren ikinci bir mesaj görünür. Geri kalan sayılar seçim kriterleriyle eşleşmez. Bu nedenle, fonksiyondan çıkılır ve iki değerden en büyüğü olan 17 döndürülür.

    Bu MsgBox fonksiyonu, özel fonksiyonunuzdaki en önemli yerlerde, tek tek değişkenlerin değerlerinin nasıl değiştiğini kontrol etmek için kullanılabilir. Mesaj kutuları, büyük bir fonksiyonunuz ve çok fazla hesaplamanız olduğunda çok yararlı olabilir. Bu durumda, hatanın kodun hangi bölümünde meydana geldiğini belirlemeniz kolay olacaktır.

    Durma noktalarını belirleyin ve adım adım gerçekleştirin

    Fonksiyonunuzun koduna, kodun yürütülmesinin duracağı kesme noktaları ekleyebilirsiniz. Böylece hesaplama sürecini adım adım takip edebilirsiniz. Bunu yaparken değişkenlerin değerlerinin nasıl değiştiğini görebilirsiniz.

    Kesme noktası eklemek için, imleci duraklatmayı seçtiğiniz ifadeyi içeren satıra getirin. Ardından sağ tıklayın ve Debug -> Kesme Noktasını Değiştir ya da sadece F9 tuşuna basın. Fonksiyon kodunun solundaki dikey gri alanda istediğiniz yere de tıklayabilirsiniz.

    Aşağıdaki ekran görüntüsünde görebileceğiniz gibi kırmızı bir daire görünecektir. Hesaplamanın durdurulacağı kod satırı kırmızı ile vurgulanmıştır.

    Şimdi, fonksiyon çalışırken VBA editör penceresi açılacaktır. İmleç, durdurduğunuz noktada konumlandırılacaktır.

    Fare imlecinizi fonksiyon kodundaki değişkenlerden herhangi birinin üzerine getirirseniz, mevcut değerlerini görebilirsiniz:

    Hesaplamaya devam etmek için F5 tuşuna basın.

    Not: Kesme noktasından sonra, hesaplamaların ilerleyişini adım adım izlemeye başlayabilirsiniz. F8 düğmesine basarsanız, VBA kodunun yalnızca bir sonraki satırı yürütülecektir. Oklu sarı çizgi de son yürütülen kod konumuna hareket edecektir.

    Fonksiyonun yürütülmesi tekrar duraklatıldığından, fare imlecini kullanarak fonksiyonun tüm değişkenlerinin geçerli değerlerini görüntüleyebilirsiniz.

    F8'e bir sonraki basış bizi bir adım ileriye götürecektir. Yani hesaplamanın sonuna kadar F8'e basabilirsiniz. Veya bir sonraki kesme noktasına kadar hesaplamaya devam etmek için F5'e basabilirsiniz.

    Bir hata oluşursa, imleç kodda hatanın oluştuğu noktada durdurulur. Ayrıca bir açılır hata mesajı görürsünüz. Bu, sorunun nedenini belirlemeyi kolaylaştırır.

    Belirlediğiniz kesme noktaları siz dosyayı kapatana kadar uygulanacaktır. Dosyayı yeniden açtığınızda, bunları yeniden ayarlamanız gerekecektir. Sizce de en uygun yöntem bu değil mi?

    Ancak bu sorun çözülebilir. Dur deyimini gerekli noktalarda işlev koduna ekleyebilir ve program yürütmesini kesme noktalarını kullanırken olduğu gibi durdurabilirsiniz.

    VBA bir Dur deyiminde, program yürütülmesini durduracak ve eyleminizi bekleyecektir. Değişkenlerin değerlerini kontrol edin, ardından devam etmek için F5 tuşuna basın.

    Veya yukarıda açıklandığı gibi işlevi adım adım yerine getirmek için F8 tuşuna basın.

    Bu Dur deyimi programın bir parçasıdır ve bu nedenle kesme noktasında olduğu gibi silinmez. Hata ayıklamayı bitirdiğinizde, kendiniz kaldırın. Veya önüne tek tırnak işareti (') koyarak bir yoruma dönüştürün.

    Debug.Print operatörünü kullanarak hata ayıklama

    Yerleştirebilirsiniz Debug.Print Bu, döngüsel olarak değişen değişkenlerin değerlerini kontrol etmek için kullanışlıdır.

    Debug.Print'in performansına ilişkin bir örneği aşağıdaki ekran görüntüsünde görebilirsiniz.

    Açıklama Debug.Print i, vMax değerleri ve sıra numaralarını yazdırır.

    Immediate penceresinde, seçilen aralıktan iki sayı (17 ve 14) görürsünüz; bu, ayarlanan sınırlara karşılık gelir ve aralarından maksimum seçilecektir. 1 ve 2 rakamları, fonksiyonun sayıların seçildiği 2 döngüyü tamamladığı anlamına gelir. Daha önce yaptığımız gibi, en önemli değişkenlerin değerlerini görüyoruz MsgBox Ancak bu durum işlevi durdurmadı.

    Yordamdan işlev çağırma

    Kullanıcı tanımlı bir işlevi çalışma sayfasındaki bir hücreden değil, bir yordamdan çağırabilirsiniz. Bu durumda, tüm hatalar Visual Basic Düzenleyici penceresinde gösterilecektir.

    Kullanıcı tanımlı GetMaxBerween fonksiyonunu bir prosedürden şu şekilde çağırabilirsiniz:

    Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End Sub

    İmleci kodun herhangi bir yerine getirin ve F5 tuşuna basın. Fonksiyonda herhangi bir hata yoksa, hesaplama sonucunu içeren bir açılır pencere göreceksiniz.

    Bir hata durumunda, VBA düzenleyicisinde ilgili bir mesaj göreceksiniz. Hesaplama durdurulacak ve hatanın oluştuğu kod satırı sarı renkle vurgulanacaktır. Hatanın nerede ve neden oluştuğunu kolayca belirleyebilirsiniz.

    Hepsi bu. Artık kendi eklentinizi oluşturdunuz, Excel'e eklediniz ve içindeki UDF'yi kullanabilirsiniz. Daha fazla UDF kullanmak istiyorsanız, kodu VBA düzenleyicisindeki eklenti modülüne yazın ve kaydedin.

    Bugünlük bu kadar. Özel fonksiyonlarda hata ayıklamanın farklı yollarını ele aldık ve bunları çalışma kitabınızda nasıl kullanacağınızı öğrendik. Bu yönergeleri gerçekten yararlı bulacağınızı umuyoruz. Herhangi bir sorunuz varsa, bu makaleye yorum olarak yazın.

    Michael Brown, yazılım araçlarını kullanarak karmaşık süreçleri basitleştirme tutkusuna sahip, kendini adamış bir teknoloji meraklısıdır. Teknoloji endüstrisinde on yılı aşkın deneyimiyle Microsoft Excel ve Outlook'un yanı sıra Google E-Tablolar ve Dokümanlar'daki becerilerini geliştirdi. Michael'ın blogu, bilgisini ve uzmanlığını başkalarıyla paylaşmaya, üretkenliği ve verimliliği artırmaya yönelik takip etmesi kolay ipuçları ve eğitimler sağlamaya adamıştır. İster deneyimli bir profesyonel, ister yeni başlayan olun, Michael'ın blogu, bu temel yazılım araçlarından en iyi şekilde yararlanmak için değerli bilgiler ve pratik tavsiyeler sunar.