Bir Excel çalışma kitabına grafikler içeren sayfalar eklemek.
Grafik sayfalarının eklenişlerinde grafik türüne göre çok az farklar vardır. Biz her tür grafiğin nasıl ekleneceği gösteren uzun bir çözüm örneği sunmak yerine, amaçları az çok fark gösteren birkaç çözüm örneği sunma yoluna gittik.
Bir çalışma kitabını temsil eden Workbook nesnesinin Charts özelliği o çalışma kitabındaki grafik sayfaları koleksiyonunu temsil eder.
“Grafik” deyince belki sizin aklınıza bazı çalışma sayfaları üzerindegördüğünüz kutu içerisindeki grafikler geliyordur. Onlar aslında “grafik nesneleri” (chart objects) ya da “gömülü grafikler”dir. Bir çalışma sayfasına grafik nesneleri eklemek için de çözüm örneği sunacağız. Bu örnekte her biri tümüyle tek bir sütun grafiği içeren özel sayfalar eklemeyi göstereceğiz.
Workbook nesnesinin Charts özelliği aslında Charts türünden bir koleksiyon nesnesidir.
Charts türü koleksiyonun Add fonksiyonu ile çalışma kitabına yeni bir grafik sayfası ekleyebilirsiniz.
Grafik sayfasının kitabın hangi sayfasından önce gözükmesini istiyorsanız, o sayfanın referansını isteğe bağlı Before argümanı ile belirlersiniz.
Grafik sayfasının kitabın hangi sayfasından sonra gözükmesini istiyorsanız, o sayfanın referansını isteğe bağlı After argümanı ile belirlersiniz.
Yine isteğe bağlı Count argümanı ile kaç grafik sayfası ekleyeceğinizi belirtirsiniz.
Add fonksiyonu sonuç olarak eklediği grafik sayfasını temsil eden Chart türünden bir nesne gönderir.
Chart nesnesinin temsil ettiği grafik sayfasına bir ad vermek için Name özelliğini kullanırsınız. Bu özelliğe atayacağınız değer grafiği içeren sayfanın adı (sekme etiketi) olarak gözükür.
Chart nesnesinin ChartType özelliğiyle grafik türünü belirleyebilirsiniz.
Bu özellik XlChartType adlandırılmış değer grubundaki değer seçeneklerden birini alır. Sık kullanılan bazı seçenekler şunlardır:
xlColumnClustered iki boyutlu gruplandırılmış sütun grafiği türü karşılaştırma amaçlı yanyana getirilerek sunulacak veriler için uygundur.
xlColumnStacked üstüste bindirilmiş sütun grafiği türü yanyana karşılaştırılacak verilerin alt parçalarını da görüntülemek için uygundur.
xlLine çizgi grafiği türü bilimsel verilerin değil, zaman dilimleriyle değişen ticari verilerin sunumu için uygundur.
xlLineMarkers noktaları temsil eden simgeleri olan çizgi grafiği türüdür.
xlPie pasta grafiği türü aynı toplama katkıda bulunan verilerin paylarını göstermek için uygundur.
xlXYScatter X-Y dağıtım grafiği türü her biri bir bağımsız X değeri ve ona bir fonksiyonla bağlı olabilecek bir bağımlı Y değişkeni değeri içeren bilimsel verilerin sunumu için uygundur.
xlXYScatterLines da veri noktalarını çizgilerle bağlayan bir X-Y dağıtım grafiği türüdür.
xlStockHLC grafik türü de en yüksek-en düşük ve kapanış fiyatlarını gösteren hisse senedi grafikleri için uygundur.
ChartTitle özelliği aracılığıyla grafik başlığını düzenleyebilirsiniz.
Bu özellik aslında ChartTitle türünden bir nesnedir.
ChartTitle nesnesinin Text özelliğinden grafik başlığı metnini belirleyebilirsiniz.
Font özelliğiyle grafik başlığının yazı tipini belirleyebilirsiniz:
grafik.ChartTitle.Font.Name = "Times New Roman"
grafik.ChartTitle.Font.Size = 14
Grafik başlığında düzenleme yapmadan önce grafikte bir başlık olmasını sağlamalısınız. Bunun için grafik sayfasını temsil eden Chart nesnesinin HasTitle özelliğine True değeri atayın.
Varsayılan değer False grafikte başlık olmayacak demektir (sürpriz!)
Grafiği temsil eden Chart nesnesinin Axes fonksiyonundan grafiğin iki ekseninden birinin referansını alabilirsiniz.
Fonksiyon argüman olarak hangi eksene erişeceğinizi belirleyen, XlAxisType adlandırılmış değerler grubunun seçeneklerinden birini alır:
xlValue değeriyle değerler eksenine erişmek istediğinizi belirtirsiniz. Sütun grafikleri için bu dikey eksendir.
xlCategory değeriyle kategoriler eksenine erişmek istediğinizi belirtirsiniz. Sütun grafikleri için bu yatay eksendir.
3 boyutlu bir sütun grafiği oluşturacaksanız, seriler üçüncü bir eksen boyunca sıralanacaktır. Bu üçüncü eksenin referansını almak için xlSeriesAxis değer seçeneğini kullanırsınız.
Axes fonksiyonu sonucu ilgilendiğiniz ekseni temsil eden Axis türünden bir nesnedir.
Axis nesnesinin AxisTitle özelliğinden eksen etiketine erişebilirsiniz.
Bu özellik de AxisTitle türünden bir nesne referansı verir. Grafik başlığında olduğu gibi, bu başlık nesnesinde de Text ve Font özelliklerini kullanarak eksen etiketinde düzenlemeler yaparsınız.
Grafiğin veri kaynağı bölgesi eksen başlığı olarak otomatik kullanılacak bir metin içermiyorsa bu metni sizin eklemeniz gerekecektir. Bunun için ekseni temsil eden Axis nesnesinin HasTitle özelliğine True değer atayın.
CategoryNames özelliğiyle de kategoriler ekseninde gözükecek etiketleri belirlersiniz. Bu özelliğe değer olarak etiket metinlerini içeren bölge referansını verirsiniz.
Değerler ekseninin etiketleri veri değerlerinin en küçük ve en büyüklerine bakılarak otomatik belirlenir. Tabi siz onları da düzenleyebilirsiniz, onu da ileriki bir örnekte göstereceğiz.
Grafiği temsil eden Chart nesnesinin SetSourceData fonksiyonuyla grafiğin veri kaynağı bölgesini belirlersiniz.
Bu fonksiyon zorunlu olan Source argümanı verileri içeren kaynak bölgesini tensil eden Range nesnesini alır.
İsteğe bağlı PlotBy argümanıyla grafikteki verilerin ne yönde sıralandığını belirlersiniz. Bu argüman için XlRowCol adlandırılmış değer grubunun şu iki seçeneğinden birini kullanabilirsiniz:
Veriler satırlar boyunca yatay sıralanmışsa, xlRows değerini atarsınız.
Veri bölgesi birden fazla satır içeriyorsa, ayrı satırlar grafikte ayrı sütun serileri olarak gözükür.
Veriler sütunlar boyunca dikey sıralanmışsa, xlColumns değerini atarsınız. Değer atamamışsanız, varsayılan değer budur.
Veri bölgesi birden fazla sütun içeriyorsa, ayrı sütunlar grafikte ayrı sütun serileri olarak gözükür.
Grafiği temsil eden Chart nesnesinin HasLegend özelliği veri serileri adlarını listeleyen kutunun görünürlüğünü ayarlamak içindir.
Seçtiğiniz veri kaynak bölgesi birden fazla seri içeriyorsa bu kutu otomatik olarak gözükür.
Bölgede seri adlarını içeren bir satır/sütun varsa, kutuda oradaki adlar gözükür.
Bölgede seri adları yoksa “Seri1”, “Seri2”, … gibi geçici adlar gözükür.
Grafikler ekleyeceğiniz çalışma kitabına ait VBA projesinde (proje organizasyon görünümündeki “BuÇalışmaKitabı” veya “ThisWorkbook” adlı proje) bir altyordam yaratın.
Bir sayfayı temsil edecek bir Worksheet nesnesi tanımlayın:
Dim verisayfa As Worksheet
Bu nesneyle kitabın grafik verilerini içeren sayfasına erişen bir komut ekleyin:
Set verisayfa = Me.Worksheets("Veriler")
Ekleyeceğiniz grafiği temsil edecek bir Chart nesnesi tanımlayın:
Dim grafik As Chart
Bu nesneyle çalışma kitabına eklettiğiniz bir sayfanın referansını alın:
Set grafik = Me.Charts.Add(verisayfa)
Grafik türünü belirleyecek bir özellik ataması ekleyin:
grafik.ChartType = xlColumnClustered
Grafiğin veri kaynağı bölgesini ad veya adresle tanımlayacak bir fonksiyon çağrısı ekleyin:
grafik.SetSourceData Source:=verisayfa.Range("Yil_2010")
Grafik ekleme işlemini bir döngüyle tekrarlayacaksanız, veri kaynağı bölgelerini ad veya adreslerini döngü sayacını kullanarak oluşturmalısınız:
For yil = 2010 To 2015
Set grafik = Me.Charts.Add(verisayfa)
grafik.ChartType = xlColumnClustered
grafik.SetSourceData Source:=verisayfa.Range("Yil_" & yil)
…
Next yil
Name özelliğiyle grafiğe vereceğiniz ad grafik sayfasının etiketinde gözükecektir:
grafik.Name = yil
Gerekiyorsa kategoriler ekseni üzerinde düzenlemeler yapın:
grafik.Axes(xlCategory).CategoryNames = verisayfa.Range("FirmaAdlari")
grafik.Axes(xlCategory).HasTitle = True
grafik.Axes(xlCategory).AxisTitle.Text = "Firmalar"
…
Gerekiyorsa grafik başlığı üzerinde düzenlemeler yapın:
grafik.HasTitle = True
grafik.ChartTitle.Text = "Firmaların Sektörlere Göre Ciroları"
Aşağıda son halini sunduğumuz altyordam önceki bir çözüm örneğiyle bölge adları eklediğimiz çalışma kitabı üzerinde çalışıyor ve yıl bölgelerini birer birer tarayacak çalışma kitabına o yıl verilerine dayalı sütun grafikleri ekliyor.
Kaynak Dosya: “KitabaGrafiklerEklemek.xlsm”
Unutmayın; kitap veya ekran satırına sığmayan komut satırları alta sarkmış olabilir. Siz onları tek satır olarak yazacaksınız!
Sub KitabaGrafiklerEklemek()
Dim verisayfa As Worksheet
Set verisayfa = Me.Worksheets("Veriler")
Dim grafik As Chart
'Bu silme döngüsü önceki denemelerde eklenmiş olan fragik sayfalarını kaldırmak için.
'İlk iş olarak silme işlemleri uyarı mesajlarını kısa bir süre için askıya alıyoruz.
Application.DisplayAlerts = False
For Each grafik In Me.Charts
grafik.Delete
Next
Application.DisplayAlerts = True
Dim yil As Integer
For yil = 2010 To 2015
Set grafik = Me.Charts.Add(verisayfa)
grafik.ChartType = xlColumnClustered
grafik.SetSourceData Source:=verisayfa.Range("Yil_" & yil)
grafik.HasTitle = True
grafik.ChartTitle.Text = "Firmaların Sektörlere Göre Ciroları " & yil
grafik.ChartTitle.Font.Name = "Times New Roman"
grafik.ChartTitle.Font.Size = 16
grafik.Axes(xlCategory).CategoryNames = verisayfa.Range("FirmaAdlari")
grafik.Axes(xlCategory).HasTitle = True
grafik.Axes(xlCategory).AxisTitle.Text = "Firmalar"
grafik.Axes(xlCategory).AxisTitle.Font.Name = "Arial"
grafik.Axes(xlCategory).AxisTitle.Font.Size = 14
grafik.Name = yil
Next yil
End Sub
Önceki denemelerde eklenmiş grafikleri silen döngüyü tedbir amaçlı ekledik. Bu döngüde silinecek her sayfada bir uyarı mesajı çıkmasın diye Excel programını temsil eden Application nesnesinin DisplayAlerts özelliğine False değeri atadık ama döngü bitiminde bu özellik değerini yeniden True yaparak uyarıları yeniden etkinleştirdik.
Adlandırılmış veri bölgesi firma ve sektör adlarını da içeriyordu; dolayısıyla grafiklerde seri adları da otomatik olarak gözüktüler. Aşağıda bu grafiklerden birini görüyorsunuz: