Özellik ikonu

WorksheetFunction

İndirme izni yok

Genel Bakış

WorksheetFunction (WorksheetFunction object), Excel'in çalışma sayfası işlevlerini VBA kodundan çağırmanızı sağlayan nesnedir. Application.WorksheetFunction ifadesiyle erişilir. TOPLA, ORTALAMA, DÜŞEYARA, EĞERSAY gibi işlevleri döngü yazmadan, tek satırda kullanmanıza olanak verir. İşlevler VBA içinde İngilizce adlarıyla ve parametreleri virgülle ayrılarak çağrılır.

Söz dizimi​

WorksheetFunction nesnesi doğrudan değil, Application nesnesinin özelliği olarak kullanılır. Her çalışma sayfası işlevi, bu nesnenin bir yöntemi gibi çağrılır:
VBA 5 satır
Değişken = Application.WorksheetFunction.IşlevAdı(Arg1, Arg2, ...)

' Örnek
Dim toplam As Double
toplam = Application.WorksheetFunction.Sum(Range("B2:B7"))
Parametreler:
  • IşlevAdı: Çağırmak istediğiniz çalışma sayfası işlevinin İngilizce adı (Sum, VLookup, CountIf gibi). Türkçe ad (TOPLA, DÜŞEYARA) VBA'da çalışmaz. Zorunludur.
  • Arg1, Arg2, ...: İşlevin kendi bağımsız değişkenleri. Aralıklar Range nesnesi olarak, ölçütler ve sabitler metin ya da sayı olarak verilir. Gerekli sayısı işleve göre değişir; isteğe bağlı olanlar atlanabilir.
  • Dönüş değeri: İşlevin sonucudur; sayı, metin, mantıksal değer ya da dizi olabilir. Sonucu tutacak değişkenin türü uygun olmalıdır; emin değilseniz Variant kullanın.
Birden çok işlev çağıracaksanız With Application.WorksheetFunction ... End With bloğu kodu kısaltır; blok içinde işlevi başında nokta ile yazarsınız.

Önemli özellikler​

WorksheetFunction nesnesinin kendi özellikleri azdır; asıl değeri yöntemlerindedir:
  • Application: Nesneyi barındıran Excel uygulamasını (Application nesnesi) döndürür. Salt okunurdur.
  • Parent: Nesnenin üst nesnesini döndürür. Pratikte nadiren gerekir.
  • Creator: Nesneyi oluşturan uygulamayı belirten sayısal kodu döndürür. Gündelik kodlarda kullanılmaz.

Önemli yöntemler ve olaylar​

Her çalışma sayfası işlevi, WorksheetFunction üzerinde bir yöntemdir. Sık kullanılanlar şunlardır (parantez içinde Türkçe Excel karşılıkları):
  • Sum (TOPLA), Average (ORTALAMA), Max (MAK), Min (MİN): Temel toplama, ortalama ve uç değer hesapları.
  • Count (BAĞ_DEĞ_SAY), CountA (BAĞ_DEĞ_DOLU_SAY), CountIf (EĞERSAY), SumIf (ETOPLA): Sayma ve koşullu toplama.
  • Median (ORTANCA), Large (BÜYÜK), Small (KÜÇÜK): İstatistiksel sıralama işlemleri.
  • VLookup (DÜŞEYARA), Match (KAÇINCI), Index (İNDİS): Tabloda arama ve konum bulma.
  • Round (YUVARLA), Pmt (DEVRESEL_ÖDEME), Transpose (DEVRİK_DÖNÜŞÜM): Yuvarlama, finans ve dizi işlemleri.
WorksheetFunction bir olay sunmaz. Ayrıca EĞER (If), VE (And), VEYA (Or) gibi VBA'nın kendi karşılığı bulunan işlevler bu nesnede yer almaz; bunlar için VBA deyimlerini ve işleçlerini kullanın.

Hata yönetimi: WorksheetFunction ve Application farkı​

Aynı işlevi iki biçimde çağırabilirsiniz ve hata davranışı farklıdır. Application.WorksheetFunction.VLookup aranan değeri bulamazsa çalışma zamanı hatası 1004 verir ve makro durur; bu hatayı On Error deyimiyle yakalamanız gerekir. Application.VLookup ise hata vermez, #YOK gibi bir hata değeri döndürür; bunu IsError işleviyle denetlersiniz:
VBA 5 satır
Dim sonuc As Variant
sonuc = Application.VLookup("K999", Range("A2:C7"), 3, False)
If IsError(sonuc) Then
    MsgBox "Kayıt bulunamadı"
End If
İki yaklaşım da geçerlidir. Hata değeriyle çalışmak istiyorsanız Application biçimini, hata oluştuğunda akışı kesmek ya da yakalamak istiyorsanız WorksheetFunction biçimini seçin.

1. Toplam, ortalama ve uç değerler​

Altı aylık satış adetleri B sütunundadır. Aşağıdaki makroyu standart modüle yapıştırın; E2:E5 hücrelerine toplam, ortalama, en yüksek ve en düşük değeri yazar.
VBA 17 satır
Option Explicit

Sub OzetHesapla()
    Dim ws As Worksheet
    Dim veri As Range

    Set ws = ActiveSheet
    Set veri = ws.Range("B2:B7")

    ' Birden çok işlevi tek blokta çağırıyoruz
    With Application.WorksheetFunction
        ws.Range("E2").Value = .Sum(veri)
        ws.Range("E3").Value = .Average(veri)
        ws.Range("E4").Value = .Max(veri)
        ws.Range("E5").Value = .Min(veri)
    End With
End Sub
WorksheetFunction
Formülünü incelemek için bir hücre seçin.
ABCDE
1AySatış AdediGöstergeDeğer
2Ocak120Toplam768
3Şubat95Ortalama128,00
4Mart143En Yüksek168
5Nisan110En Düşük95
6Mayıs168
7Haziran132
Satış ÖzetiExcelDepo v1.0.0
Makro çalıştığında toplam 768, ortalama 128,00, en yüksek değer 168 ve en düşük değer 95 olarak hesaplanır. Sonuçlar hücrelere değer olarak yazılır; B sütunundaki veriler değişirse bu hücreler kendiliğinden güncellenmez, makroyu yeniden çalıştırmanız gerekir.

2. DÜŞEYARA ile hata yakalama​

A:C aralığında ürün kodu, ürün adı ve fiyat listesi yer alır. D sütunundaki kodlar aranır ve fiyatlar E sütununa yazılır. Listede olmayan bir kod için makro hata vermek yerine 'Bulunamadı' yazar. Kodu standart modüle yapıştırın.
VBA 26 satır
Option Explicit

Sub FiyatAra()
    Dim ws As Worksheet
    Dim i As Long
    Dim fiyat As Variant

    Set ws = ActiveSheet

    For i = 2 To 4
        fiyat = Empty

        ' Bulunamazsa VLookup 1004 hatası verir; hatayı yakalıyoruz
        On Error Resume Next
        fiyat = Application.WorksheetFunction.VLookup( _
            ws.Cells(i, 4).Value, ws.Range("A2:C7"), 3, False)

        If Err.Number <> 0 Then
            ws.Cells(i, 5).Value = "Bulunamadı"
            Err.Clear
        Else
            ws.Cells(i, 5).Value = fiyat
        End If
        On Error GoTo 0
    Next i
End Sub
WorksheetFunction
Formülünü incelemek için bir hücre seçin.
ABCDE
1Ürün KoduÜrünFiyatAranan KodSonuç
2K101Klavye450,00K1034.250,00
3K102Fare275,50K1051.190,00
4K103Monitör4.250,00K999Bulunamadı
5K104Kulaklık890,00
6K105Webcam1.190,00
7K106Yazıcı3.650,00
Fiyat AramaExcelDepo v1.0.0
İlk kod için sonuç 4.250,00, ikinci kod için 1.190,00 olarak gelir. Listede bulunmayan üçüncü kod için makro durmaz; E4 hücresine Bulunamadı yazılır. Bunu sağlayan, hatayı Err.Number ile denetleyip Err.Clear ile temizlememizdir.

3. Koşullu toplama ve istatistik​

A sütununda şehirler, B sütununda satış tutarları vardır. Makro İstanbul için toplam ve işlem sayısını, ayrıca tüm tutarların ortancasını, ikinci büyük değerini ve yuvarlanmış ortalamasını E2:E6 hücrelerine yazar. Kodu standart modüle yapıştırın.
VBA 24 satır
Option Explicit

Sub SehirAnalizi()
    Dim ws As Worksheet
    Dim sehirler As Range
    Dim tutarlar As Range

    Set ws = ActiveSheet
    Set sehirler = ws.Range("A2:A9")
    Set tutarlar = ws.Range("B2:B9")

    With Application.WorksheetFunction
        ' İstanbul satışlarının toplamı (ETOPLA)
        ws.Range("E2").Value = .SumIf(sehirler, "İstanbul", tutarlar)
        ' İstanbul kayıt sayısı (EĞERSAY)
        ws.Range("E3").Value = .CountIf(sehirler, "İstanbul")
        ' Tüm tutarların ortancası (ORTANCA)
        ws.Range("E4").Value = .Median(tutarlar)
        ' İkinci büyük tutar (BÜYÜK)
        ws.Range("E5").Value = .Large(tutarlar, 2)
        ' Ortalamayı tam sayıya yuvarla (YUVARLA)
        ws.Range("E6").Value = .Round(.Average(tutarlar), 0)
    End With
End Sub
WorksheetFunction
Formülünü incelemek için bir hücre seçin.
ABCDE
1ŞehirTutarÖlçütSonuç
2İstanbul12.500,00İstanbul toplamı39.500,00
3Ankara8.400,00İstanbul işlem sayısı3
4İzmir9.650,00Ortanca tutar9.875,00
5İstanbul15.200,00İkinci büyük tutar12.500,00
6Bursa7.300,00Ortalama (yuvarlanmış)10.481
7Ankara10.100,00
8İstanbul11.800,00
9İzmir8.900,00
Şehir SatışlarıExcelDepo v1.0.0
İstanbul satışlarının toplamı 39.500,00, İstanbul için kayıt sayısı 3 olarak bulunur. Tüm tutarların ortancası 9.875,00, ikinci büyük tutar 12.500,00 ve yuvarlanmış ortalama 10.481 değerindedir. İç içe çağrıda (.Round(.Average(tutarlar), 0)) bir işlevin sonucu doğrudan diğerine bağımsız değişken olarak verilebilir.

Kullanırken dikkat edin​

  • İngilizce işlev adı kullanın: VBA'da işlev adları her zaman İngilizcedir ve bağımsız değişkenler virgülle ayrılır. DÜŞEYARA yerine VLookup, EĞERSAY yerine CountIf yazın. Excel'in dil ayarı bunu değiştirmez.
  • Aralıklar Range nesnesi olmalı: Aralığı bağımsız değişken olarak Range nesnesiyle verin; metin olarak "B2:B7" yazmak işe yaramaz. Sayfa belirtmezseniz Range etkin sayfayı kullanır. Bu yüzden başka bir sayfadaki veriler için Worksheets("Ad").Range(...) biçimini tercih edin.
  • Hata 1004 ve On Error: WorksheetFunction üzerinden çağrılan işlev hata üretirse (DÜŞEYARA'nın değeri bulamaması gibi) makro durur. Bunu On Error Resume Next ile yakalayıp Err.Number değerini denetleyin ya da Application.VLookup biçimini kullanıp IsError ile sınayın. On Error Resume Next kullandıktan sonra hata yönetimini On Error GoTo 0 ile kapatmayı unutmayın.
  • Sonuç değer olarak yazılır: Makronun hücreye yazdığı sonuç sabit bir değerdir, formül değildir. Kaynak veri değişince sonuç güncellenmez. Canlı güncellenen sonuç istiyorsanız hücrenin Formula özelliğine formül yazın.
  • Her işlev bulunmaz: Tüm çalışma sayfası işlevleri WorksheetFunction üzerinde yer almaz. VBA'nın kendi karşılığı olanlar (Len, Left, Mid, Abs, Now gibi) ve EĞER, VE, VEYA gibi mantıksal işlevler bu nesnede bulunmaz. Yeni sürümlerle eklenen bazı işlevler de sürüme göre eksik olabilir; yazarken açılan liste işlevi göstermiyorsa Application.Evaluate yöntemini deneyin.
  • Performans ipucu: Bir hücre döngüsünde her hücre için işlev çağırmak yavaştır. Mümkünse tüm aralığı tek çağrıda işleve verin; örneğin hücreleri tek tek toplamak yerine Sum ile aralığı bir kerede toplayın.
  • İlgili konular: Application nesnesi, Range nesnesi, Evaluate yöntemi, Range.Formula özelliği, On Error deyimi, Err nesnesi, IsError işlevi, With deyimi; TOPLA, ORTALAMA, DÜŞEYARA, EĞERSAY, ETOPLA, ORTANCA, BÜYÜK, YUVARLA.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
7
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst