棒グラフ
指定した範囲内のデータを使用して、新しいシートに縦棒グラフを作成する
hisWorkbook.Worksheets("Sheet1").Range("A1:B5")
でSheet1のA1:B5の範囲をグラフの範囲として設定しています。- グラフの種類は
xlColumnClustered
を指定して縦棒グラフに設定しています。 - グラフタイトルは、
chartTitle
変数に設定した文字列を使用して設定しています。 - 最後に、グラフのオブジェクトを
chartObject
変数に割り当て、グラフを作成しています。
Sub CreateBarChart()
Dim chartTitle As String
chartTitle = "縦棒グラフ" 'グラフタイトルを設定
Dim chartSheet As Worksheet
Set chartSheet = Worksheets.Add 'グラフを作成するシートを作成
Dim chartRange As Range
Set chartRange = ThisWorkbook.Worksheets("Sheet1").Range("A1:B5") 'グラフの範囲を指定
'※上記の例ではSheet1のA1:B5がグラフの範囲
Dim chartObject As ChartObject
Set chartObject = chartSheet.ChartObjects.Add(0, 0, 500, 400) 'グラフを追加
With chartObject.Chart
.SetSourceData chartRange 'グラフの範囲を設定
.ChartType = xlColumnClustered '縦棒グラフに設定
.HasTitle = True 'グラフタイトルを表示
.ChartTitle.Text = chartTitle 'グラフタイトルを設定
End With
End Sub
作成例 別パターン
Sub 縦棒グラフの作成()
With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
.ChartType = xlColumnClustered
.SetSourceData Range("A2").CurrentRegion
.HasTitle = True
.ChartTitle.Text = "タイトル"
End With
MsgBox "完了"
End Sub
*行列を入れ替える場合
'行列入れ替え
Select Case .PlotBy
Case xlRows
.PlotBy = xlColumns
Case xlColumns
.PlotBy = xlRows
End Select
横棒グラフの作成
Sub 横棒グラフの作成()
With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
.ChartType = xlBarClustered
.SetSourceData Range("A2").CurrentRegion
.HasTitle = True
.ChartTitle.Text = "タイトル"
End With
MsgBox "完了"
End Sub
積み上げグラフの作成
Sub 積み上げグラフの作成()
With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
.ChartType = xlColumnStacked
.SetSourceData Range("A2").CurrentRegion
.HasTitle = True
.ChartTitle.Text = "タイトル"
End With
MsgBox "完了"
End Sub
グラフの作成
Sub グラフの作成()
With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp))
.HasTitle = True
.ChartTitle.Text = "売上一覧"
'行列入れ替え
Select Case .PlotBy
Case xlRows
.PlotBy = xlColumns
Case xlColumns
.PlotBy = xlRows
End Select
End With
ActiveSheet.ChartObjects(1).Chart.HasLegend = True
ActiveSheet.ChartObjects(1).Chart.Legend.Position = xlLegendPositionBottom
ActiveSheet.ChartObjects(1).Chart.HasDataTable = True
MsgBox "完了"
End Sub
解説
- 新しく埋め込みグラフを作成する:ChartObjects.Add(左位置, 上位置, 幅, 高さ)
- グラフの種類:集合縦棒⇒ActiveSheet.ChartType = xlColumnClustered
xlLine:折れ線/xlPie:円/xlDoughnut:ドーナツ
xlArea:面/xlXYScatter:散布図/xlRadar:レーダー - ActiveSheet.SetSourceData Source:=Range(Range(“A1”), Cells(Rows.Count, 1).End(xlUp))
⇒データ範囲を指定する - タイトルを表示する:ActiveSheet.HasTitle = True
- タイトルの文字を指定する:ActiveSheet.ChartTitle.Text = “タイトル名”
- 軸の最小値・最大値変更:ActiveSheet.Axes(xlValue).MaximumScale = 100
ActiveSheet.Axes(xlValue).MinimumScale = 0 - グラフの凡例を表示:ActiveSheet.ChartObjects(1).Chart.HasLegend = True
- グラフの凡例の位置を設定:ActiveSheet.ChartObjects(1).Chart.Legend.Position =
xlLegendPositionBottom (下) - グラフのデータテーブルを表示:ActiveSheet.ChartObjects(1).Chart.HasDataTable = True
グラフ作成_2軸
Sub グラフ作成_2軸()
With ActiveSheet.Shapes.AddChart
.Top = 10 'グラフのトップ位置
.Left = 200 'グラフの左の位置
.Width = 400 'グラフ幅
.Height = 200 'グラフの高さ
.Name = "Chart1" 'グラフの名前
With .Chart
.ChartType = xlColumnClustered '棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
.SeriesCollection.NewSeries '新しい系列追加
With .SeriesCollection(2) '新しい系列は2番目となる
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.Values = Range("C2:C13") 'データ範囲を指定
.Name = Range("C1") '項目名を指定
.AxisGroup = xlSecondary '2軸を設定を指定
End With
.HasTitle = True 'タイトル設定
.ChartTitle.Text = "年間売上/受注件数グラフ" 'タイトル文字列
With .ChartTitle.Format.TextFrame2.TextRange.Font
.Size = 10 'タイトル文字サイズ
.Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
End With
.HasLegend = True '凡例表示
.Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
With .Legend.Format.Fill
.Visible = msoTrue '塗りつぶし設定
.ForeColor.RGB = RGB(217, 217, 217) '色指定
End With
End With
End With
MsgBox "完了"
End Sub
グラフの削除
Sub グラフの削除()
ActiveSheet.ChartObjects("グラフ 1").Delete
End Sub
グラフの作成
Private Sub グラフの作成()
With ActiveSheet.ChartObjects.Add(500, 25, 500, 300).Chart 'Left/Top/Width/Height
.ChartType = xlColumnClustered 'グラフの種類:集合縦棒
'xlLine:折れ線/xlPie:円/xlDoughnut:ドーナツ/xlArea:面/xlXYScatter:散布図/xlRadar:レーダー
.SetSourceData Source:=Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp)) 'データ範囲を指定する
.HasTitle = True 'タイトルを表示する
.ChartTitle.Text = "売上一覧" 'タイトルの文字を指定する
'軸の最小値・最大値変更
'.Axes(xlValue).MaximumScale = 100
'.Axes(xlValue).MinimumScale = 0
'行列入れ替え
Select Case .PlotBy
Case xlRows
.PlotBy = xlColumns
Case xlColumns
.PlotBy = xlRows
End Select
End With
' グラフの凡例を表示 ’http://excel.style-mods.net/tips_vba/tips_vba_6_08.htm
ActiveSheet.ChartObjects(1).Chart.HasLegend = True
' グラフの凡例の位置を設定
ActiveSheet.ChartObjects(1).Chart.Legend.Position = xlLegendPositionBottom 'xlLegendPositionTop
' グラフのデータテーブルを表示 http://excel.style-mods.net/tips_vba/tips_vba_6_09.htm
ActiveSheet.ChartObjects(1).Chart.HasDataTable = True
MsgBox "完了"
End Sub
グラフの作成2
Sub test()
Dim co As ChartObject
Dim graphRange As Range
' グラフを追加して
Set co = ActiveSheet.ChartObjects.Add(500, 25, 500, 300)
' グラフの範囲を設定する
Set graphRange = ActiveSheet.Range(Range("A3"), Cells(Rows.Count, 4).End(xlUp))
' グラフの種別を設定して(折れ線グラフ)
co.Chart.ChartType = xlLineMarkers
' データの範囲を設定する
co.Chart.SetSourceData Source:=graphRange
Dim i As Long
With ActiveSheet.ChartObjects(1).Chart
For i = 1 To .SeriesCollection.Count
.SeriesCollection(i).HasDataLabels = True
.SeriesCollection(i).DataLabels.ShowValue = True
.SetElement msoElementDataLabelTop
Next i
End With
MsgBox "完了"
End Sub
グラフの作成3
Sub Sample5()
'新しいグラフを作成
With ActiveSheet.Shapes.AddChart
.Top = 10 'グラフのトップ位置
.Left = 200 'グラフの左の位置
.Width = 400 'グラフ幅
.Height = 200 'グラフの高さ
.Name = "Chart1" 'グラフの名前
With .Chart
.ChartType = xlColumnClustered '棒グラフを指定
.SetSourceData Range(Cells(1, 1), Cells(13, 2)) 'データ範囲を指定
.SeriesCollection.NewSeries '新しい系列追加
With .SeriesCollection(2) '新しい系列は2番目となる
.ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
.Values = Range("C2:C13") 'データ範囲を指定
.Name = Range("C1") '項目名を指定
.AxisGroup = xlSecondary '2軸を設定を指定
End With
.HasTitle = True 'タイトル設定
.ChartTitle.Text = "年間売上/受注件数グラフ" 'タイトル文字列
With .ChartTitle.Format.TextFrame2.TextRange.Font
.Size = 10 'タイトル文字サイズ
.Fill.ForeColor.ObjectThemeColor = 6 'タイトル文字色
End With
.HasLegend = True '凡例表示
.Legend.Position = xlLegendPositionRight '凡例表示位置(右側)
With .Legend.Format.Fill
.Visible = msoTrue '塗りつぶし設定
.ForeColor.RGB = RGB(217, 217, 217) '色指定
End With
End With
End With
MsgBox "完了"
End Sub
コメント