Grafy
Ve VBA lze grafy vytvářet pomocí objektu ChartObjects. Nejprve je nutné definovat umístění typu grafu.
Obecná tvorba grafu
Sekce “Obecná tvorba grafu”Použití
Sekce “Použití”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
Praktické vysvětlení
Sekce “Praktické vysvětlení”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.
Typy grafů
Sekce “Typy grafů”Při tvorbě grafů je možné používat jakýkoliv druh grafu pomocí příkazu chartType.
Sloupcový seskupený
Sekce “Sloupcový seskupený”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
Spojnicový
Sekce “Spojnicový”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
Výsečový
Sekce “Výsečový”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
Pruhový
Sekce “Pruhový”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
Plošný
Sekce “Plošný”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
Úprava grafů
Sekce “Úprava grafů”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
Úprava nadpisu grafu
Sekce “Úprava nadpisu grafu”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
Úprava osy X a Y
Sekce “Úprava osy X a Y”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
Úprava legendy
Sekce “Úprava legendy”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 |
Změna barvy sloupců
Sekce “Změna barvy sloupců”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
Zobrazení mřížek
Sekce “Zobrazení mřížek”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
Odstranění grafu
Sekce “Odstranění grafu”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
