Přeskočit na obsah

GrafyVBA

Ve VBA lze grafy vytvářet pomocí objektu ChartObjects. Nejprve je nutné definovat umístění typu grafu.

Sub VytvoritGraf()

Dim ws As Worksheet

Dim graf As ChartObject

Set ws = ThisWorkbook.Sheets(„List1“)

Set graf = ws.ChartObjects.Add(Left:=50, Width:=300, Top:=50, Height:=200)

graf.Chart.ChartType = xlColumnClustered

graf.Chart.SetSourceData Source:=ws.Range(„A1:F105“)

End Sub

ChartObjects.Add – vytvoří prázdný objekt grafu.

  • Left – Pozice grafu nalevo v listu
  • Width – Šířka grafu
  • Top – Pozice grafu nahoře od listu
  • Height – Výška grafu

ChartType = xlColumnClustered – Nastaví typ grafu na seskupený sloupcový.

SetSourceData Source:=ws.Range(„A1:F105“) – Definuje oblast dat pro graf.

Při tvorbě grafů je možné používat jakýkoliv druh grafu pomocí příkazu chartType.

chartType = xlColumnClustered

Pro tvorbu sloupcového grafu bude použit sloupec Typ kurzu a Cena do hodnot:

Dim ws As Worksheet

Dim chartObj As ChartObject

Set ws = ThisWorkbook.Sheets(„Sloupcovy“) ‚ Nastavení listu, kde jsou data

Set rng = ws.Range(„A1:B4“) ‚ Výběr dat (Kurz + Cena)

Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)

With chartObj.Chart

.SetSourceData Source:=rng ‚ Nastavení zdroje dat

.ChartType = xlColumnClustered ‚ Nastavení typu grafu – seskupený sloupcový

End With

chartType = xlLine

Pro tvorbu spojnicového grafu bude použit sloupec Datum a Cena do hodnot:

Dim ws As Worksheet

Dim chartObj As ChartObject

Set ws = ThisWorkbook.Sheets(„Spojnicovy“) ‚ Nastavení listu, kde jsou data

Set Rng = ws.Range(„A1:B8“) ‚ Výběr dat (Datum + Cena)

‚ Vytvoření grafu

Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)

With chartObj.Chart

.SetSourceData Source:=Rng ‚ Nastavení zdroje dat

.ChartType = xlLine ‚ Spojnicový graf

End With

chartType = xlPie

Pro tvorbu výsečového grafu bude použit sloupec Typ kurzu a Cena do hodnot:

Dim ws As Worksheet

Dim chartObj As ChartObject

Set ws = ThisWorkbook.Sheets(„Vysečovy“) ‚ Nastavení listu, kde jsou data

Set Rng = ws.Range(„A1:B4“) ‚ Výběr dat (Typ kurzu + Cena)

‚ Vytvoření grafu

Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)

With chartObj.Chart

.SetSourceData Source:=Rng ‚ Nastavení zdroje dat

.ChartType = xlPie ‚ Výsečový graf

End With

chartType = xlBarClustered

Pro tvorbu pruhového grafu bude použit sloupec Typ kurzu a Cena do hodnot:

Dim ws As Worksheet

Dim chartObj As ChartObject

Set ws = ThisWorkbook.Sheets(„Pruhovy“) ‚ Nastavení listu, kde jsou data

Set Rng = ws.Range(„A1:B4“) ‚ Výběr dat (Typ kurzu + Cena)

‚ Vytvoření grafu

Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)

With chartObj.Chart

.SetSourceData Source:=Rng ‚ Nastavení zdroje dat

.ChartType = xlBarClustered ‚ Pruhový graf

End With

chartType = xlArea

Pro tvorbu plošného grafu bude použit sloupec Datum a Cena do hodnot:

Dim ws As Worksheet

Dim chartObj As ChartObject

Set ws = ThisWorkbook.Sheets(„Plosny“) ‚ Nastavení listu, kde jsou data

Set Rng = ws.Range(„A1:B8“) ‚ Výběr dat (Datum + Cena)

‚ Vytvoření grafu

Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)

With chartObj.Chart

.SetSourceData Source:=Rng ‚ Nastavení zdroje dat

.ChartType = xlArea ‚ Plošný graf

End With

Jednotlivé prvky grafu lze dále upravovat. Úprava bude provedena na sloupcovém grafu. Začátek kódu grafu:

Dim chartObj As ChartObject

Set ws = ThisWorkbook.Sheets(„Sloupcovy“) ‚ Nastavení listu, kde jsou data

Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)

Set Rng = ws.Range(„A1:B4“)

With chartObj.Chart

.SetSourceData Source:=Rng ‚ Nastavení zdroje dat

.ChartType = xlColumnClustered ‚ Nastavení typu grafu – seskupený sloupcový

End With

With ChartObj.Chart

.HasTitle = True ‚ Povolit nadpis

.ChartTitle.Text = „Tržby podle typu kurzu“ ‚ Nadpis grafu

.ChartTitle.Font.Size = 14 ‚ Velikost písma

.ChartTitle.Font.Bold = True ‚ Tučné písmo

.ChartTitle.Font.Color = RGB(0, 0, 255) ‚ Modrá barva

End With

With ChartObj.Chart

‚ Osa X

.Axes(xlCategory, xlPrimary).HasTitle = True ‚ Povolit název osy x

.Axes(xlCategory, xlPrimary).AxisTitle.Text = „Typ kurzu“ ‚ Název osy X

.Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 10 ‚ Velikost popisků osy X

‚ Osa Y

.Axes(xlValue, xlPrimary).HasTitle = True ‚ Povolit název osy Y

.Axes(xlValue, xlPrimary).AxisTitle.Text = „Celková cena“ ‚ Název osy Y

.Axes(xlValue, xlPrimary).TickLabels.Font.Size = 10 ‚ Velikost popisků osy Y

End With

With ChartObj.Chart.Legend

.Position = xlLegendPositionBottom ‚ Umístění legendy dole.

.Font.Size = 10 ‚ Velikost písma

.Font.Bold = True ‚ Tučné písmo

.Font.Color = RGB(255, 0, 0) ‚ Červená barva

End With

Umístění legendy:

Hodnota Popis
xlLegendPositionBottom Dole (výchozí)
xlLegendPositionTop Nahoře grafu
xlLegendPositionLeft Vlevo od grafu
xlLegendPositionRight Vpravo od grafu
xlLegendPositionCorner V rohu grafu
xlLegendPositionCustom Vlastní pozice

Dim s As Series

Set s = ChartObj.Chart.SeriesCollection(1) ‚ První řada dat (v případě, že by řád dat bylo více, je nutné vždy stanovit o jakou řadu dat se jedná).

s.Format.Fill.ForeColor.RGB = RGB(0, 255, 0) ‚ Zelená barva sloupců

s.Format.Line.Visible = msoFalse ‚ Skrýt obrys sloupce. Pokud má být zobrazeno, argument by byl msoTrue

Přidání datových popisků

Sekce “Přidání datových popisků”

With ChartObj.Chart.SeriesCollection(1) ‚ Popisky k 1, řadě grafu

.HasDataLabels = True ‚ Povolit datové popisky

.DataLabels.Font.Size = 12 ‚ Velikost písma

.DataLabels.Font.Bold = True ‚ Tučné písmo

.DataLabels.Font.Color = RGB(255, 165, 0) ‚ Oranžová barva

End With

With ChartObj.Chart.Axes(xlValue).MajorGridlines

.Format.Line.ForeColor.RGB = RGB(200, 200, 200) ‚ Barva čáry šedá

.Format.Line.Weight = 1 ‚ Tloušťka čáry

End With

Přidání trendové čáry

Sekce “Přidání trendové čáry”

ChartObj.Chart.SeriesCollection(1).Trendlines.Add(Type:=xlLinear, Forward:=0, Backward:=0).Format.Line.ForeColor.RGB = RGB(0, 0, 255) ‚ Přidání lineární trendové čáry, kdy nemá jít do budoucny ani minula s modrou barvou.

Přidání nové datové řady a vedlejší osa

Sekce “Přidání nové datové řady a vedlejší osa”

Pokud je nutné přidat další data do grafu, je nutné určit číslo kolekce. Jelikož jedna kolekce se již v grafu bude nacházet, další číslo kolekce bude 2.

Dim graf As Chart

Set graf = ActiveSheet.ChartObjects(1).Chart

graf.SeriesCollection.NewSeries

graf.SeriesCollection(2).XValues = ActiveSheet.Range(„A1:A5“) ‚ Data na x-ovou osu

graf.SeriesCollection(2).Values = ActiveSheet.Range(„C1:C5“) ‚ Data do hodnot (sloupců sloupcového grafu) k již existujícím datům.

graf.SeriesCollection(2).AxisGroup = xlSecondary ‚ Přesunutí druhé datové řady na sekundární osu

Pro odstranění grafu je buďto nutné znát název daného grafu nebo možnost odstranit všechny grafy na listu.

Odstranění grafu dle názvu grafu

Sekce “Odstranění grafu dle názvu grafu”

ActiveSheet.ChartObjects(„Graf 1“).Delete

Odstranění grafu pokud je samostatným listem

Sekce “Odstranění grafu pokud je samostatným listem”

Sheets(„NázevGrafu“).Delete

Smazání všech grafů na listu

Sekce “Smazání všech grafů na listu”

Pro odstranění všech grafů na listu je nutné projít cyklem, např. for each, všechny objekty typu graf.

Dim ch As ChartObject

For Each ch In ActiveSheet.ChartObjects

ch.Delete

Next ch

© 2026 Excelland