EXCEL VBA CHARTS NEDİR?
Bir Excel çalışma sayfasında, verileri görselleştirmek için bir grafik oluşturmanın manuel sürecinden geçeriz, ancak VBA grafiklerinde bu süreç bazı basit kodlarla otomatikleştirilebilir. Örneğin, Excel'deki aşağıdaki verilere bakın.

A1'den B6'ya kadar ürün bazında satış bilgisi tablomuz var. Aşağıdaki kodu kullanabilir ve basit VBA grafikleri ekleyebiliriz.
Sub VBA_Charts()
Dim Ws As Worksheet
Dim Product_Chart As Object
Set Ws = ActiveSheet
Set Product_Chart = Ws.Shapes.AddChart2
With Product_Chart.Chart
.SetSourceData Range(“A1:B6”)
.ChartType = xlColumnClustered
.ChartTitle.Text = “Product-wise Sales Performance”
End With
End Sub
Bu kodu çalıştırdığımızda aşağıdaki grafiği elde edeceğiz.

- VBA Grafik koleksiyonu VBA nesne koleksiyonunun bir parçasıdır.
- Varsayılan olarak grafik ayrı bir çalışma sayfasına eklenecektir.
- Aynı çalışma sayfasına bir grafik eklemek için çalışma sayfası referansını kullanmalıyız ve bu çalışma sayfasında chart.add metodunu kullanmalıyız.
- FOR EACH döngüsünü kullanarak tüm grafikler arasında dolaşabiliriz.
- VBA Grafik başlığı ChartTitle.Text özelliğini kullanarak değiştirilebilir.
- VBA Grafiklerinin PDF'e aktarımı, grafiğin PDF formatında kaydedilmesiyle yapılabilir.
Excel'de VBA Kodu Kullanarak Grafikler Nasıl Eklenir?
VBA kodunu kullanarak VBA grafikleri oluşturmak için adım adım bir yaklaşım gösterelim. Aşağıda listelenen örnekleri ve adımları izleyin.
Örnek 1 – VBA Kodlamasını Kullanarak Grafikler Oluşturma
Herhangi bir grafik oluşturmak için veriye sahip olmak hayati önem taşır; grafikler yalnızca verilerin görsel bir temsilidir. Bu nedenle, VBA Grafikleri kullanarak bir grafik eklemek için kullanacağımız aşağıdaki verilere sahibiz.

Bir ayda cep telefonu satan satış elemanı sayısına ilişkin veridir. Bu veriyi VBA Grafikleri kullanarak görselleştirelim.
Adım 1: Makroya isim vererek alt rutin prosedürünü başlatın.

Adım 2: Bir değişkeni Grafik nesnesi veri türü olarak tanımlamalıyız.

Adım 3: Tanımlı değişken “Sales_Chart” bir nesne değişkenidir; dolayısıyla “Set” anahtar sözcüğünü kullanarak grafiğe ait referansı ayarlamalıyız.

Adım 4: “Set” anahtar sözcüğünü kullanarak referansı ayarladıktan sonra, “Sales_Chart” değişken adını kullanarak Grafiğin tüm özelliklerine ve yöntemlerine erişebiliriz. Grafiğin tüm kullanılabilir özelliklerini ve yöntemlerini gösteren IntelliSense listesini görmek için değişken adını ve ardından bir noktayı girin.

Adım 5: Grafiklerle yapmamız gereken ilk şey veri aralığı alanını ayarlamak. Bunu yapmak için, Charts nesnesinin “SetSourceData” metodunu kullanın.

“SetSourceData” metodunu seçtiğimizde argümanlarını görebiliriz .

Adım 6: “Kaynak Olarak Aralık” argümanı için, çalışma sayfasından veri aralığını seçmeliyiz. A1'den B8'e kadar veri aralığını sağlayalım.
Veri aralığını vermeden önce bir hususu aklımızda tutmamız gerekiyor; çalışma sayfası adıyla birlikte veri aralığını da vermemiz gerekiyor.
Burada veriler “Satış Verileri” çalışma sayfasındadır.

Çalışma sayfası adıyla birlikte veri aralığını da verelim.

Adım 7: Sonra, kaynak verileri görselleştirmek için hangi tür grafiğin eklenmesi gerektiğini, yani "grafik türünü" seçmeliyiz.
“Sales_Chart” grafik değişkenini girin ve IntelliSense listesinden grafik türünü seçin.

Adım 8: Grafik türü özelliğini seçtikten sonra. Eşittir işareti girin; önceden tanımlanmış tüm grafiklerin listelendiğini göreceğiz.

Adım 9: Sütun çubuk grafiğini eklemek için “xlColumnClustered” öğesini seçin .

Adım 10: Grafik türüne karar verildikten sonra bir grafik başlığı eklemeliyiz. Bunun için “ChartTitle” özelliğini kullanın ve eşittir işareti girerek ayarlayın.

VBA Grafikleri ile başlamak için bu yeterlidir. Aşağıda tam kod bulunmaktadır:
Sub VBA_Charts_Example1()
Dim Sales_Chart As Chart
Set Sales_Chart = Charts.Add
Sales_Chart.SetSourceData Worksheets(“Sales Data”).Range(“A1:B8”)
Sales_Chart.ChartType = xlColumnClustered
Sales_Chart.ChartTitle.Text = “Sales Performance”
End Sub
Kodu çalıştıralım. Aşağıdaki gibi bir grafik elde ederiz.

Grafiği ayrı bir çalışma sayfasında alıyoruz çünkü grafiğin konumunu tanımlamamız gerekiyor. Bu nedenle, varsayılan olarak Excel grafiği yepyeni bir çalışma sayfasına ekler.
Tablonun Tüm Özelliklerini ve Yöntemlerini With İfadesine Dahil Edin
Yukarıdaki kodda, her seferinde, Chart nesnesiyle ilişkili tüm özelliklere ve yöntemlere erişmek için "Sales_Chart" adlı grafik değişkenini kullandık. Ancak, bu en iyi kodlama uygulaması değildir. Chart nesnesiyle ilişkili tüm özellikleri ve yöntemleri dahil etmek için WITH ifadesini kullanacağız. Aşağıdaki koda bakın.
Sub VBA_Charts_Example1()
Dim Sales_Chart As Chart
Set Sales_Chart = Charts.Add
With Sales_Chart
.SetSourceData Worksheets(“Sales Data”).Range(“A1:B8”)
.ChartType = xlColumnClustered
.ChartTitle.Text = “Sales Performance”
End With
End Sub
Sarı renkli koddan da görebileceğiniz gibi, WITH ifadesinin içerisinde değişken ismini bir kez kullandık ve içerisinde de Chart nesnesine ait tüm özellikleri ve metodları kullandık.
Verilerin bulunduğu çalışma sayfasına grafiği eklemeyi deneyelim.
Örnek 2 – Şekil Olarak Aynı Excel Sayfasıyla Bir Grafik Oluşturun
Tabloyu aynı sayfaya eklemek için biraz farklı bir yaklaşım izlememiz gerekiyor. Aşağıda listelenen adımları takip edelim.
Adım 1: Çalışma sayfası referansını ayarlamak için bir değişken tanımlayın.

Adım 2: Hedeflenen çalışma sayfası referansını, nihai grafiği ekleyeceğimiz tanımlanmış değişkene ayarlayın. Bu durumda, grafiği veri sayfası çalışma sayfasına, yani "Satış Verileri"ne eklemeliyiz.

Adım 3: VBA'da Aralık referansını ayarlamak için bir değişken tanımlayın .

Adım 4: Veri çalışma sayfası dahil olmak üzere veri aralığı referansını Aralık değişkenine ayarlayın.

Adım 5: Nesne türünde bir değişken tanımlayın.

Adım 6: Çalışma sayfası değişkeni Ws'yi kullanarak, tanımlanan değişken için grafik referansını hedef sayfada Şekil olarak ayarlayın.

Adım 7: WITH ifadesini ve grafik değişken adını kullanın.

Adım 8: Daha önce kullanılan kodu kullanarak WITH ifadesinin içerisinde bir grafik oluşturun.
Sub VBA_Charts_Example2()
Dim Ws As Worksheet
Set Ws = Worksheets(“Sales Data”)
Dim Rng As Range
Set Rng = Ws.Range(“A1:B8”)
Dim MyChart As Object
Set MyChart = Ws.Shapes.AddChart2
With MyChart.Chart
.SetSourceData Rng ‘Here we are using the data range variable RNG to hold the data range
.ChartType = xlPie ‘We are using the PIE chart
.ChartTitle.Text = “Product-wise Sales Performance”
.ApplyDataLabels
End With
End Sub
Kodu çalıştırdığımızda, aynı çalışma sayfasında şekil olarak PIE grafiğini excelde elde edeceğiz .

Grafiği daha iyi tasarlamak için grafiğin diğer özelliklerini ve yöntemlerini kullanırız ve gerekli ayarları uygularız.
Örnek 3 – Grafikler Arasında Döngü Oluşturmak İçin Kod
Hücreler ve çalışma sayfaları arasında döngü yapmak için döngüler kullanmış olmalısınız. Benzer şekilde, döngüler bir çalışma kitabındaki tüm grafikler arasında döngü yapabilir. Örneğin, bir sayfadaki aşağıdaki grafiklere bakın.

Aynı veriler ve aynı çalışma sayfası için üç farklı türde grafiğimiz var. Bu üç grafikte değiştirmemiz gereken ortak bir şey başlıktır.
Bunu aynı anda yapabilmek için, bu çalışma sayfaları arasında dolaşıp grafik başlığını değiştirmeliyiz.
Sub VBA_Charts_Example3()
Dim MyChart As ChartObject
For Each MyChart In ActiveSheet.ChartObjects
If MyChart.Name <> “Chart 6” Then
MyChart.Chart.ChartTitle.Text = “Product-wise Sales Performance”
End If
Next MyChart
End Sub
Yazdığımız basit bir döngü kodudur. Çalışma sayfasındaki tüm mevcut grafikler arasında döngü yapacak ve grafik başlığını "Ürün bazında Satış Performansı" olarak değiştirecektir.
Kodu çalıştırdığımızda tüm grafiklerde aşağıdaki değişikliği göreceğiz.

Tüm grafiklerin başlığı “Ürün Bazında Satış Performansı” olarak değiştirildi.
Bu döngünün tüm grafiklerde geçerli olması, yapacağımız değişikliklerin tüm grafiklerde aynı olacak olmasıdır.
Ancak, belirli bir grafiği değişikliklerden hariç tutmak istiyorsak, IF mantıksal ifadesini ve grafik adını kullanarak bunları yoksaymalı veya değişiklik yapmak için yalnızca o grafikleri dahil etmeliyiz.
Grafik adlarını görüntülemek için, düzenleme bölümünün altındaki GİRİŞ sekmesine gidin ve “Bul ve Seç” açılır menüsüne tıklayın . “Seçim Bölmesi” seçeneğini belirleyin .

Çalışma sayfasındaki tüm nesneleri sergileyecek ve isimlerini gösterecektir.

Herhangi bir grafiğin üzerine çift tıklayıp grafik ismini değiştirebiliriz.
Döngünün içindeki grafiğin başlığını değiştirirken “Chart6”yı dahil etmek istemediğimizi varsayalım. Aşağıdaki kodu yazıyoruz.
Sub VBA_Charts_Example3()
Dim MyChart As ChartObject
For Each MyChart In ActiveSheet.ChartObjects
If MyChart.Name <> “Chart 6” Then
MyChart.Chart.ChartTitle.Text = “Product-wise Sales Performance”
End If
Next MyChart
End Sub
Bu kod, IF mantıksal koşulunu kullanarak “Grafik 6” grafik adını arayacaktır. Grafik adı “Grafik 6”ya eşit değilse, “Ürün bazında Satış Performansı”na değişecektir. Grafik adı “Grafik 6”ya eşitse, grafiğin başlık adını değiştirmeyecektir.
Örnek #4 – Grafik Oluşturmak İçin Alternatif Yöntem
Görüldüğü gibi, Chart nesnesini kullanarak bir grafik oluşturabiliriz. Başka bir alternatif yöntem de Chart nesnesi yöntemini kullanmaktır. Aşağıdaki kod, Chart nesnesi yöntemini kullanarak bir grafik oluşturacaktır.
Sub VBA_Charts_Example4()Dim Ws As Worksheet
Set Ws = Worksheets(“Sales Data”)
Dim Rng As Range
Set Rng = Ws.Range(“A1:B8”)
Dim MyChart As ChartObject
Set MyChart = Ws.ChartObjects.Add(Left:=ActiveCell.Left, Width:=300, Top:=ActiveCell.Top, Height:=200)
With MyChart.Chart
.SetSourceData Rng ‘Here we are using the data range variable RNG to hold the data range
.ChartType = xlPie ‘We are using the PIE chart
.ChartTitle.Text = “Product-wise Sales Performance”
.ApplyDataLabels
End With
End Sub
Önceki ve güncel metotlar arasındaki tek fark, burada “ChartObject” veri tipini kullanmış olmamızdır.
Sonraki adımda chartobject.add metodunu kullanarak değişken chart özelliğini ayarlıyoruz. Kodun geri kalanı bir öncekiyle aynı.
Kodu çalıştıralım. Aşağıdaki pasta grafiğini elde edeceğiz.

Dikkat Edilmesi Gereken Önemli Noktalar
- VBA Charts bir nesnedir; nesne referansını bir değişken kullanarak ayarlamazsak hata verecektir.
- Bir grafik eklediğimizde, veri aralığını ve verilerin bulunduğu çalışma sayfası referansını sağlamalıyız.
- Bir çalışma sayfasındaki tüm grafikler arasında döngü oluşturduğumuzda, yaptığımız değişiklikler tüm grafikleri etkileyecektir. Ancak, IF mantıksal koşulunu kullanarak grafiğe adıyla atıfta bulunarak belirli grafikleri hariç tutabiliriz .
- Veri aralığı dinamik değilse ve artarsa, VBA kodu yine de yalnızca eski verileri dikkate alacak, genişletilmiş veri aralığını değil. Bunu önlemek için dinamik aralığı kullanmalıyız.
Dinamik bir grafik oluşturmak için kod güncellenmiş veri aralığını dinamik olarak alabilmelidir. Aşağıdaki kod veri aralığını dinamik olarak bulacak ve ardından bu veri aralığını kullanarak dinamik bir grafik oluşturacaktır.
Sub VBA_Charts_Example_FAQ()
Dim Ws As Worksheet
Set Ws = Worksheets(“Sales Data”)
'Son kullanılan satırı dinamik olarak bul
Dim LR As Long
LR = Ws.Cells(Rows.Count, 1).End(xlUp).Row
'Son kullanılan sütunu dinamik olarak bul
Dim LC As Long
LC = Ws.Cells(1, Columns.Count).End(xlToLeft).Column
'Aralığı, yeniden boyutlandırma özelliğini ve LR ve LC'yi tutan değişkenleri kullanarak ayarla
Dim Rng As Range
Set Rng = Cells(1, 1).Resize(LR, LC)
Rng.Select
Dim MyChart As Object
Set MyChart = Ws.Shapes.AddChart2
With MyChart.Chart
.SetSourceData Rng 'Burada veri aralığını tutmak için veri aralığı değişkeni RNG'yi kullanıyoruz
.ChartType = xlPie 'PIE grafiğini kullanıyoruz.ChartTitle.Text
= “Ürün bazında Satış Performansı”
.ApplyDataLabels
End With
End Sub
Excel çalışma sayfasında bir grafiği taşımak için chart.parent metodunu kullanmalıyız. Aşağıda bir grafiği taşıma örneği verilmiştir.
With MyChart.Parent
.Left = Sheets(“Sales Data”).Range(“B1”).Left
.Top = Sheets(“Sales Data”).Range(“B1”).Top
.Width = Sheets(“Sales Data”).Range(“B1:G1”).Width
.Height = Sheets(“Sales Data”).Range(“B1:G10”).Height
End With
Bir grafiği yeniden adlandırmak için, grafik referansını tutan değişkeni kullanmamız ve ardından o grafiğin “Ad” özelliğini kullanmamız gerekir.
Aşağıdaki kod grafiği “Satış Performans Grafiği” olarak yeniden adlandıracaktır.
MyChart.Name = “Satış Performans Grafiği”
Her ikisi de bir grafik oluşturmak için kullanılır; ancak, bu ikisi arasındaki farka bakalım.
Grafik Nesnesi: Gömülü bir grafik, grafiğin diğer özelliklerine ve yöntemlerine geçmeden önce boyut ve yönelimin ayarlanmasını gerektirir.
Grafik: Grafiğin özelliklerine ve yöntemlerine geçmeden önce hiçbir şeyin ayarlanmasını gerektirmeyen bir nesnedir . Sadece Charts.Add yöntemini gerektirir.
