Genel Bakış
PivotTableWizard (Worksheet.PivotTableWizard yöntemi), bir Worksheet nesnesi üzerinden yeni bir özet tablo (PivotTable) raporu oluşturur ve oluşan PivotTable nesnesini döndürür. Kaynak veri türünü, kaynak aralığı ve raporun yerleşeceği hücreyi parametre olarak alır. Eski makrolarda çok sık karşınıza çıkar. Yeni kodlarda genellikle PivotCaches.Create ve CreatePivotTable tercih edilir.
Parametreler:
Kaynak türü için kullanılan sabitler:
Yöntem OLE DB veri kaynaklarında kullanılamaz. Kaynak aralığın ilk satırı mutlaka başlık olmalıdır; başlık hücreleri boş ya da yinelenen olursa rapor oluşmayabilir. Rapor, hedefte başka bir özet tabloyla çakışmamalıdır.
Makro, F1 hücresinden başlayan SatisOzet adlı özet tabloyu oluşturur. Ürünler satırlarda, şehirler sütunlarda yer alır; hücrelerde satış toplamları görünür. D2 hücresine yazılan $F$1:$J$6 adresi raporun kapladığı alanı gösterir. Alan adlarını metin olarak yazmak yerine başlık hücrelerinden okumak, başlık değişse bile kodun çalışmasını sağlar.
Rapor F5 hücresinden başlar; Bölüm alanı sayfa alanı olarak raporun üstünde görünür ve filtre işlevi görür. RowGrand değeri False verildiği için D2 hücresinde YANLIŞ, ColumnGrand True verildiği için D3 hücresinde DOĞRU yazar. Genel toplam satırının ya da sütununun hangi ayara bağlı olduğunu rapor görünümünde de kontrol edebilirsiniz.
AdetOzet adlı rapor F1 hücresinden başlar ve her ay için adetlerin ortalamasını gösterir. D2 hücresinde otomatik biçim ayarının durumu (YANLIŞ), D3 hücresinde veri kaydı ayarının durumu (DOĞRU) yer alır. D4 hücresindeki $F$1:$G$7 adresi raporun kapladığı alanı gösterir. DataFields(1).Function özelliği, veri alanının özetleme işlevini xlAverage olarak değiştirir.
Söz dizimi
Yöntem bir çalışma sayfası nesnesi üzerinde çağrılır ve bir PivotTable nesnesi döndürür. Tüm parametreler isteğe bağlıdır:ifade.PivotTableWizard(SourceType, SourceData, TableDestination, TableName, RowGrand, ColumnGrand, SaveData, HasAutoFormat, AutoPage, Reserved, BackgroundQuery, OptimizeCache, PageFieldOrder, PageFieldWrapCount, ReadData, Connection)
- SourceType: Verinin türü; isteğe bağlı. xlDatabase (sayfadaki liste ya da veritabanı), xlExternal (başka bir uygulamadaki dış veri), xlConsolidation (birden çok aralığın birleştirilmesi) ve xlPivotTable (başka bir özet tablo) değerlerinden biri olur.
- SourceData: Raporun kaynağı; isteğe bağlı. Genellikle başlık satırını da içeren bir Range nesnesidir. Birleştirmede aralık dizisi, başka bir özet tabloda o tablonun adı verilir.
- TableDestination: Raporun yerleşeceği sayfa aralığının sol üst hücresi; isteğe bağlı. Verilmezse etkin hücre kullanılır.
- TableName: Yeni özet tablonun adı; isteğe bağlı. Verilmezse Excel otomatik ad üretir.
- RowGrand: True ise satırlar için genel toplam gösterilir; isteğe bağlı.
- ColumnGrand: True ise sütunlar için genel toplam gösterilir; isteğe bağlı.
- SaveData: True ise veri, rapor ile birlikte çalışma kitabına kaydedilir; isteğe bağlı.
- HasAutoFormat: True ise rapor yenilendiğinde ya da alanlar taşındığında Excel otomatik biçim uygular; isteğe bağlı.
- AutoPage: Yalnızca birleştirme (xlConsolidation) raporlarında geçerlidir; Excel'in sayfa alanı oluşturup oluşturmayacağını belirler; isteğe bağlı.
- Reserved: Kullanılmaz; boş bırakın.
- BackgroundQuery: True ise sorgu arka planda eşzamansız çalışır; isteğe bağlı.
- OptimizeCache: True ise önbellek oluşturulurken en iyileştirilir; isteğe bağlı.
- PageFieldOrder: Sayfa alanlarının dizilişi; xlDownThenOver (varsayılan) ya da xlOverThenDown.
- PageFieldWrapCount: Rapordaki her sütun ya da satırdaki sayfa alanı sayısı; isteğe bağlı.
- ReadData: True ise dış veritabanındaki verinin kopyasıyla rapor oluşturulur; isteğe bağlı.
- Connection: Dış veri kaynağına bağlantı bilgisini içeren metin; isteğe bağlı.
Dönüş değeri ve kaynak türü sabitleri
Yöntem, oluşturulan raporu temsil eden bir PivotTable nesnesi döndürür. Dönüş değerini bir değişkene atamak için Set deyimini kullanın ve parametreleri parantez içinde verin. Dönen nesne ile alanları yerleştirebilir, veri alanlarının işlevini değiştirebilir ve raporu yenileyebilirsiniz.Kaynak türü için kullanılan sabitler:
- xlDatabase: Excel çalışma sayfasındaki başlıklı bir liste ya da veritabanı aralığı.
- xlExternal: Başka bir uygulamadan alınan dış veri.
- xlConsolidation: Birden çok çalışma sayfası aralığının birleştirilmesi.
- xlPivotTable: Aynı kitaptaki başka bir özet tablo raporu.
Ne zaman kullanılır, nelere dikkat edilir
Yöntem, Özet Tablo Sihirbazı'nın makro karşılığıdır ve Excel'in eski sürümlerinden kalan kodlarla uyumluluk için hala çalışır. Yeni bir proje yazıyorsanız önce PivotCaches.Create ile önbellek oluşturup ardından CreatePivotTable yöntemini kullanmak daha esnektir ve Microsoft'un önerdiği yoldur.Yöntem OLE DB veri kaynaklarında kullanılamaz. Kaynak aralığın ilk satırı mutlaka başlık olmalıdır; başlık hücreleri boş ya da yinelenen olursa rapor oluşmayabilir. Rapor, hedefte başka bir özet tabloyla çakışmamalıdır.
1. Satış listesinden temel özet tablo
Ürün, şehir ve satış tutarı içeren listeden ürünleri satırlara, şehirleri sütunlara yerleştiren bir özet tablo oluşturulur. Kodu bir standart modüle yapıştırın. Makro, raporun kapladığı adresi D2 hücresine yazar.
VBA
24 satır
Option Explicit
' Ham listeden özet tablo oluşturur
Sub OzetTabloOlustur()
Dim ws As Worksheet
Dim pt As PivotTable
Set ws = ActiveSheet
' Kaynak A1:C9, rapor F1 hücresinden başlar
Set pt = ws.PivotTableWizard( _
SourceType:=xlDatabase, _
SourceData:=ws.Range("A1:C9"), _
TableDestination:=ws.Range("F1"), _
TableName:="SatisOzet")
' Alan adlarını başlık hücrelerinden alıyoruz
pt.PivotFields(ws.Range("A1").Value).Orientation = xlRowField
pt.PivotFields(ws.Range("B1").Value).Orientation = xlColumnField
pt.PivotFields(ws.Range("C1").Value).Orientation = xlDataField
' Raporun kapladığı adresi yaz
ws.Range("D2").Value = pt.TableRange1.Address
End Sub
PivotTableWizard
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | G | H | I | J | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Ürün | Şehir | Satış | Sonuç | Toplam Satış | Şehir | ||||
| 2 | Laptop | İstanbul | 12.500,00 | $F$1:$J$6 | Ürün | Ankara | İstanbul | İzmir | Genel Toplam | |
| 3 | Telefon | Ankara | 8.200,00 | Laptop | 11800 | 12500 | 12100 | 36400 | ||
| 4 | Laptop | Ankara | 11.800,00 | Tablet | 4700 | 4300 | 9000 | |||
| 5 | Tablet | İzmir | 4.300,00 | Telefon | 8200 | 9100 | 7900 | 25200 | ||
| 6 | Telefon | İstanbul | 9.100,00 | Genel Toplam | 20000 | 26300 | 24300 | 70600 | ||
| 7 | Tablet | İstanbul | 4.700,00 | |||||||
| 8 | Laptop | İzmir | 12.100,00 | |||||||
| 9 | Telefon | İzmir | 7.900,00 |
Satış VerisiExcelDepo v1.0.0
2. Sayfa alanı ve genel toplam ayarı
Personeller satırlara, bölüm bilgisi ise sayfa alanına (filtre) yerleştirilir. Satırlar için genel toplam kapatılır, sütunlar için açık bırakılır. Kodu standart modüle yapıştırın; makro iki ayarın durumunu D2 ve D3 hücrelerine yazar.
VBA
29 satır
Option Explicit
' Sayfa alanlı özet tablo ve genel toplam ayarı
Sub BolumOzetiOlustur()
Dim ws As Worksheet
Dim pt As PivotTable
Set ws = ActiveSheet
' Sayfa alanı için üstte boşluk kalsın diye F5 seçildi
Set pt = ws.PivotTableWizard( _
SourceType:=xlDatabase, _
SourceData:=ws.Range("A1:C9"), _
TableDestination:=ws.Range("F5"), _
TableName:="BolumOzet", _
RowGrand:=False, _
ColumnGrand:=True)
' Personel satır alanı, Bölüm sayfa alanı
pt.AddFields RowFields:=ws.Range("A1").Value, _
PageFields:=ws.Range("B1").Value
' Tutar veri alanı
pt.PivotFields(ws.Range("C1").Value).Orientation = xlDataField
' Ayarların durumunu sayfaya yaz
ws.Range("D2").Value = pt.RowGrand
ws.Range("D3").Value = pt.ColumnGrand
End Sub
PivotTableWizard
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Personel | Bölüm | Tutar | Sonuç | |||
| 2 | Ayşe Yılmaz | Satış | 15.400,00 | YANLIŞ | |||
| 3 | Mehmet Demir | Satış | 13.200,00 | DOĞRU | Bölüm | (All) | |
| 4 | Elif Kaya | Destek | 8.700,00 | ||||
| 5 | Can Özkan | Destek | 9.400,00 | Toplam Tutar | |||
| 6 | Zeynep Arslan | Satış | 14.100,00 | Personel | Total | ||
| 7 | Burak Şahin | Lojistik | 7.600,00 | Ayşe Yılmaz | 15400 | ||
| 8 | Selin Aydın | Lojistik | 8.100,00 | Burak Şahin | 7600 | ||
| 9 | Emre Çelik | Destek | 8.900,00 | Can Özkan | 9400 | ||
| 10 | Elif Kaya | 8700 | |||||
| 11 | Emre Çelik | 8900 | |||||
| 12 | Mehmet Demir | 13200 | |||||
| 13 | Selin Aydın | 8100 | |||||
| 14 | Zeynep Arslan | 14100 | |||||
| 15 | Genel Toplam | 85400 |
Personel SatışExcelDepo v1.0.0
3. Otomatik biçim, veri kaydı ve işlev değişimi
Aylara göre adetlerin ortalamasını gösteren bir özet tablo oluşturulur. Otomatik biçim kapatılır, veri kaydı açık bırakılır ve veri alanının işlevi ortalamaya çevrilir. Kodu standart modüle yapıştırın; makro ayarları ve rapor adresini D2:D4 hücrelerine yazar.
VBA
29 satır
Option Explicit
' HasAutoFormat ve SaveData ayarlı, ortalama alan özet tablo
Sub OrtalamaOzetiOlustur()
Dim ws As Worksheet
Dim pt As PivotTable
Set ws = ActiveSheet
Set pt = ws.PivotTableWizard( _
SourceType:=xlDatabase, _
SourceData:=ws.Range("A1:C9"), _
TableDestination:=ws.Range("F1"), _
TableName:="AdetOzet", _
SaveData:=True, _
HasAutoFormat:=False)
' Ay satır alanı, Adet veri alanı
pt.PivotFields(ws.Range("A1").Value).Orientation = xlRowField
pt.PivotFields(ws.Range("C1").Value).Orientation = xlDataField
' Veri alanının işlevini toplamdan ortalamaya çevir
pt.DataFields(1).Function = xlAverage
' Sonuçları sayfaya yaz
ws.Range("D2").Value = pt.HasAutoFormat
ws.Range("D3").Value = pt.SaveData
ws.Range("D4").Value = pt.TableRange1.Address
End Sub
PivotTableWizard
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Ay | Ürün | Adet | Sonuç | Ortalama Adet | ||
| 2 | Ocak | Kalem | 120 | YANLIŞ | Ay | Total | |
| 3 | Ocak | Defter | 80 | DOĞRU | Ocak | 100 | |
| 4 | Şubat | Kalem | 140 | $F$1:$G$7 | Şubat | 117,5 | |
| 5 | Şubat | Defter | 95 | Mart | 135 | ||
| 6 | Mart | Kalem | 160 | Nisan | 127,5 | ||
| 7 | Mart | Defter | 110 | Genel Toplam | 120 | ||
| 8 | Nisan | Kalem | 150 | ||||
| 9 | Nisan | Defter | 105 |
Aylık AdetlerExcelDepo v1.0.0
Kullanırken dikkat edin
- Kaynak aralığın başlıkları: Kaynak aralığın ilk satırı başlık satırı olmalı ve her başlık dolu ve benzersiz olmalıdır. Boş ya da yinelenen başlıklar hata verir veya alan adlarının karışmasına yol açar. Kaynak aralığı sabit yazmak yerine, veri büyüyecekse bir tablo (ListObject) ya da dinamik bir aralık kullanmak daha güvenlidir.
- Hedef hücre ve çakışma: TableDestination belirtmezseniz rapor etkin hücreye yerleşir. Hedef alan başka bir özet tabloyla çakışırsa makro hata verir. Sayfa alanı kullanacaksanız hedef hücrenin üstünde yeterli boş satır bırakın.
- Aynı adda rapor oluşturmayın: TableName ile verdiğiniz ad, aynı çalışma sayfasındaki başka bir özet tabloyla aynı olmamalıdır. Makroyu birden çok kez çalıştıracaksanız önce varsa eski raporu silin ya da farklı bir ad üretin.
- Alan adlarını doğru yazın: PivotFields içinde alan adı yazarken adın başlık hücresiyle birebir aynı olması gerekir. Türkçe karakter ve boşluk hataları yaygındır. Alan adını başlık hücresinden okumak ya da sıra numarasıyla çağırmak bu hatayı önler.
- Yeni kodlarda tercih edilecek yol: Yeni yazdığınız makrolarda PivotCaches.Create ile önbellek oluşturup CreatePivotTable yöntemini kullanmak, hem daha güncel hem de daha ayrıntılı denetim sağlar. PivotTableWizard yöntemini çoğunlukla eski kodları anlamak ve bakımını yapmak için bilmeniz yeterlidir.
- Kaynak türü sınırları: Yöntem OLE DB veri kaynaklarında kullanılamaz. Dış veri kullanırken Connection, BackgroundQuery ve ReadData parametrelerinin sonuçlarını mutlaka deneyerek doğrulayın; makro dış bağlantıyı açarken kullanıcıdan izin ya da kimlik bilgisi isteyebilir.
- İlgili konular:
- PivotCaches.Create: Özet tablo önbelleği oluşturan güncel yöntem.
- PivotCache.CreatePivotTable: Önbellekten özet tablo oluşturur.
- PivotTable nesnesi: Rapor üzerinde işlem yapmak için kullanılır.
- PivotFields ve AddFields: Alanları satır, sütun, sayfa ve veri alanı olarak yerleştirir.
- RefreshTable: Özet tabloyu kaynak veriyle günceller.
- Ekle > Özet Tablo (Insert > PivotTable): Aynı işlemin arayüzdeki karşılığı.
- ÖZETVERİAL: Özet tablodan değer çeken çalışma sayfası işlevi.