大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、棒グラフを作成する方法について、ご紹介します。元データの選択→グラフの挿入→グラフ種類の設定という手順で、作成できます。グラフの操作をする際は、「ベース」となるグラフを作成しておいて、コピーして利用すると便利です。

はじめに

この記事では、棒グラフを作成する方法について、ご紹介します。

棒ブラフを作成するには、

  • 元データを選択
  • グラフを挿入
  • グラフの種類を設定

という流れです。

グラフの書式設定で、

  • タイトルと凡例の設定
  • 軸ラベルの設定
  • 系列の色の設定
  • データラベルの設定

についてもご紹介します。

グラフの書式設定するVBAコードは、たくさんあるので、すべてVBAで設定すると大変です。

「ベース」となるグラフを作成しておいて、コピーして利用すると、効率的にグラフを操作できます。

グラフのコピーについて、詳細はこちらでまとめています。

では、VBAで棒グラフを作成する方法について、解説していきます。

この記事で紹介すること

  • VBAで棒グラフを作成する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAコードまとめ

棒グラフを作成するVBAコードについて、まとめています。

VBAコードだけ確認したい場合に、ご活用ください。

'棒グラフを作成
ActiveSheet.Range("A1").Select '元データを選択
ActiveSheet.Shapes.AddChart2.Select 'グラフを作成
ActiveChart.ChartType = xlColumnClustered '集合縦棒

'グラフ種類を変更
ActiveSheet.ChartObjects(1).Chart.ChartType = xlColumnStacked '積み上げ縦棒

'「縦」棒グラフの種類
ActiveChart.ChartType = xlColumnClustered '集合縦棒
ActiveChart.ChartType = xlColumnStacked '積み上げ縦棒
ActiveChart.ChartType = xlColumnStacked100 '100%  積み上げ縦棒
ActiveChart.ChartType = xl3DColumnClustered '3-D 集合縦棒
ActiveChart.ChartType = xl3DColumnStacked '3-D 積み上げ縦棒
ActiveChart.ChartType = xl3DColumnStacked100 '3-D 100% 積み上げ縦棒
ActiveChart.ChartType = xl3DColumn '3-D 縦棒

'「横」棒グラフの種類
ActiveChart.ChartType = xlBarClustered '集合横棒
ActiveChart.ChartType = xlBarStacked '積み上げ横棒
ActiveChart.ChartType = xlBarStacked100 '100% 積み上げ横棒
ActiveChart.ChartType = xl3DBarClustered '3-D 集合横棒
ActiveChart.ChartType = xl3DBarStacked '3-D 積み上げ横棒
ActiveChart.ChartType = xl3DBarStacked100 '3-D 100% 積み上げ横棒

'参照範囲を設定
ActiveSheet.ChartObjects(1).Chart.SetSourceData Range("A1").CurrentRegion '参照範囲を指定
ActiveSheet.ChartObjects(1).Chart.SetSourceData Union(Range("A1:B4"), Range("D1:D4")) 'データが離れている場合
    
'系列のデータを設定
ActiveSheet.ChartObjects(1).Chart.PlotBy = xlRows '「行のデータ」を系列にする
ActiveSheet.ChartObjects(1).Chart.PlotBy = xlColumns '「列のデータ」を系列にする

では、解説していきます。

VBAで棒グラフを作成する

VBAで棒グラフを作成してみます。

「Shapes.AddChart2」を使う

グラフを作成するには、「Shapes.AddChart2」を使います。

手順は、

  • 元データを選択
  • グラフを作成
  • グラフの種類を設定

という流れです。

Sub TEST1()
    
    '棒グラフを作成
    ActiveSheet.Range("A1").Select '元データを選択
    ActiveSheet.Shapes.AddChart2.Select 'グラフを作成
    ActiveChart.ChartType = xlColumnClustered '集合縦棒
    
End Sub

元データを用意しておきます。

元データ

元データ

では、VBAコードを実行してみます。

「棒グラフ」を作成できた

「棒グラフ」を作成できた

「棒グラフ」を作成できました。

棒グラフの種類を変更

棒グラフの種類を変更してみます。

「ChartType」を使う

グラフの種類を変更するには、「ChartType」を使います。

Sub TEST2()
    
    'グラフ種類を変更
    ActiveSheet.ChartObjects(1).Chart.ChartType = xlColumnStacked '積み上げ縦棒
    
End Sub

元グラフを用意しておきます。

元グラフ

元グラフ

では、VBAコードを実行してみます。

グラフの「種類」を変更できた

グラフの「種類」を変更できた

グラフの「種類」を変更できました。

棒グラフの種類

棒グラフは、「縦棒グラフ」と「横棒グラフ」があります。

それぞれで、VBAコードをまとめています。

「縦棒グラフ」の種類です。

「縦棒グラフ」の種類

  • 集合縦棒(xlColumnClustered)
  • 積み上げ縦棒(xlColumnStacked)
  • 100% 積み上げ縦棒(xlColumnStacked100)
  • 3-D 集合縦棒(xl3DColumnClustered)
  • 3-D 積み上げ縦棒(xl3DColumnStacked)
  • 3-D 100% 積み上げ縦棒(xl3DColumnStacked100)
  • 3-D 縦棒(xl3DColumn)

VBAコードの例は、こんな感じになります。

'縦棒グラフの種類
ActiveChart.ChartType = xlColumnClustered '集合縦棒
ActiveChart.ChartType = xlColumnStacked '積み上げ縦棒
ActiveChart.ChartType = xlColumnStacked100 '100%  積み上げ縦棒
ActiveChart.ChartType = xl3DColumnClustered '3-D 集合縦棒
ActiveChart.ChartType = xl3DColumnStacked '3-D 積み上げ縦棒
ActiveChart.ChartType = xl3DColumnStacked100 '3-D 100% 積み上げ縦棒
ActiveChart.ChartType = xl3DColumn '3-D 縦棒

「横棒グラフ」の種類は、このようになります。

「横棒グラフ」の種類

  • 集合横棒(xlBarClustered)
  • 積み上げ横棒(xlBarStacked)
  • 100% 積み上げ横棒(xlBarStacked100)
  • 3-D 集合横棒(xl3DBarClustered)
  • 3-D 積み上げ横棒(xl3DBarStacked)
  • 3-D 100% 積み上げ横棒(xl3DBarStacked100)

VBAコードの例は、こんな感じです。

'横棒グラフの種類
ActiveChart.ChartType = xlBarClustered '集合横棒
ActiveChart.ChartType = xlBarStacked '積み上げ横棒
ActiveChart.ChartType = xlBarStacked100 '100% 積み上げ横棒
ActiveChart.ChartType = xl3DBarClustered '3-D 集合横棒
ActiveChart.ChartType = xl3DBarStacked '3-D 積み上げ横棒
ActiveChart.ChartType = xl3DBarStacked100 '3-D 100% 積み上げ横棒

作成したい種類に応じで、VBAコードを選択しましょう。

その他のグラフ種類の一覧

他のグラフの種類については、こちらでまとめています。

棒グラフの参照範囲を変更

棒グラフの参照範囲を変更してみます。

「SetSourceData」を使う

参照範囲を変更するには、「SetSourceData」を使います。

'データ範囲を設定
ActiveSheet.ChartObjects(1).Chart.SetSourceData 参照範囲

では、参照範囲を変更するVBAコードを試してみます。

元データにデータを追加して参照範囲を変更

元データにデータを追加して参照範囲を変更してみます。

元データのセルを選択する際は、「.CurrentRegion」を使うと便利です。

Sub TEST3()
    
    'データ範囲を設定
    ActiveSheet.ChartObjects(1).Chart.SetSourceData Range("A1").CurrentRegion
    
    '「行のデータ」を系列にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlRows
    
End Sub

参照範囲を変更すると、行と列で少ない方のデータが系列になってしまうので、「.Plotby = xlRows」で行のデータを系列にしています。

元データにデータを追加しておきます。

元データにデータを追加

元データにデータを追加

では、VBAコードを実行してみます。

グラフに反映できた

VBAで追加データをグラフに反映できた

VBAで追加データをグラフに反映できました。

離れているデータを参照する

離れているデータを参照するには、「Union」を使うと便利です。

行のデータを系列にしたいので、「.Plotby = xlRows」とします。

Sub TEST4()
    
    '離れているデータ範囲を設定
    ActiveSheet.ChartObjects(1).Chart.SetSourceData Union(Range("A1:B4"), Range("D1:D4"))
    
    '「行のデータ」を「系列」にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlRows
    
End Sub

やりたいのは、離れているデータをグラフにしたい、ということです。

離れているデータをグラフにしたい

離れているデータをグラフにしたい

「Union」を使うと、複数のセル範囲を設定できます。

「Union」で2つの範囲を指定

「Union」で2つの範囲を指定する

では、VBAコードを実行してみます。

「離れているデータ」を参照できた

「離れているデータ」を参照できた

「離れているデータ」を参照できました。

最終行が変わる場合のセル範囲の取得

セル範囲を参照する際に、元データの行数が変わってしまう場合は、「End(xlUp)」を使って最終行を取得すると便利です。

元データの行数が変わる場合の、セル範囲の取得については、こちらでまとめています。

棒グラフの系列を変更する

棒グラフの系列を変更してみます。

「Plotby」を使う

系列の設定は、「Plotby」を使います。

Sub TEST5()
    
    '系列にするデータを指定
    ActiveSheet.ChartObjects(1).Chart.PlotBy = 系列にするデータ(xlRowsもしくはxlColumns)
    
End Sub

「縦方向」のデータを系列にする場合は、「xlRows」を使います。

「横方向」のデータを系列にする場合は、「xlColumns」です。

縦方向のデータを系列にする

「縦方向」のデータを系列にしてみます。

設定する値は、「xlRows」です。

Sub TEST6()
    
    '「行のデータ」を系列にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlRows
    
End Sub

元グラフを用意しておきます。

元グラフ

元グラフ

では、VBAコードを実行してみます。

「縦方向のデータ」を系列にできた

「縦方向のデータ」を系列にできた

「縦方向のデータ」を系列にできました。

横方向のデータを系列にする

次は、「横方向」のデータを「系列」にしてみます。

設定する値は、「xlColumns」になります。

Sub TEST7()
    
    '「列のデータ」を系列にする
    ActiveSheet.ChartObjects(1).Chart.PlotBy = xlColumns
    
End Sub

元グラフを用意しておきます。

元グラフ

元グラフ

では、VBAコードを実行してみます。

「横方向のデータ」を系列にできた

「横方向のデータ」を系列にできた

「横方向のデータ」を系列にできました。

VBAで棒グラフの位置とサイズを設定

VBAで、棒グラフの「位置」と「サイズ」を設定してみます。

位置の設定

位置を設定してみます。

位置は、グラフの「左」と「上」を設定することでできます。

左の位置は、「.Left」で、上の位置は、「.Top」を使います。

Sub TEST8()
    
    With ActiveSheet.ChartObjects(1)
        .Left = Range("B7").Left '左の位置
        .Top = Range("B7").Top '上の位置
    End With
    
End Sub

元グラフを用意しておきます。

元グラフ

元グラフ

では、VBAコードを実行してみます。

「左」と「上」を設定できた

「左」と「上」を設定できた

「左」と「上」を設定できました。

「.Left」や「.Top」を応用して使う

位置を「.Left」や「.Top」で取得できれば、別シートの「同じ位置」にグラフの「コピー」や「移動」ができます。

「.Left」や「.Top」の使い方について、詳細はこちらでまとめています。

幅と高さの設定

「幅」と「高さ」の設定をしてみます。

「幅」は「.Width」で、「高さ」は「.Height」を使います。

Sub TEST9()
    
    With ActiveSheet.ChartObjects(1)
        .Width = Range("B7:G17").Width '幅
        .Height = Range("B7:G17").Height '高さ
    End With
    
End Sub

元グラフを用意しておきます。

元グラフ

元グラフ

では、VBAコードを実行してみます。

「幅」と「高さ」を設定できた

「幅」と「高さ」を設定できた

「幅」と「高さ」を設定できました。

VBAで棒グラフのタイトルや軸、凡例の設定

VBAで棒グラフの「タイトル」や「軸」、「凡例」の設定をしてみます。

タイトルを設定する

タイトルを設定してみます。

「タイトル」を設定する

「タイトル」を表示するには、「.HasTitle = True」を使います。

タイトルの「テキスト」を入力するには、「.ChartTitle.Text」に入力します。

Sub TEST10()
    
    With ActiveSheet.ChartObjects(1).Chart
        .HasTitle = True 'タイトルを表示
        .ChartTitle.Text = "売上一覧"
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

VBAでタイトルを設定できました

VBAでタイトルを設定できました。

「タイトル」を非表示にする

「タイトル」を非表示にするには、「.HasTitle = False」とします。

Sub TEST11()
    
    With ActiveSheet.ChartObjects(1).Chart
        .HasTitle = False 'タイトルを非表示
    End With
    
End Sub

では、VBAコードを実行してみます。

VBAでタイトルを非表示にできました

VBAでタイトルを非表示にできました。

タイトルの書式設定

タイトルの設定には、「位置」や「テキストの書式」、「背景色」、「枠線」の設定があります。

タイトルの設定について、詳細はこちらでまとめています。

凡例を設定する

凡例を設定してみます。

「凡例」を表示する

「凡例」を表示するには、「.HasLegend = True」です。

Sub TEST12()
    
    With ActiveSheet.ChartObjects(1).Chart
        .HasLegend = True '凡例を表示
        .Legend.IncludeInLayout = True 'グラフと重ねない
        .Legend.Position = xlBottom '下に表示
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

VBAで凡例を表示できました

VBAで凡例を表示できました。

「凡例」を非表示にする

「凡例」を非表示にするには、「.HasLegend = False」とします。

Sub TEST13()
    
    With ActiveSheet.ChartObjects(1).Chart
        .HasLegend = False '凡例を非表示
    End With
    
End Sub

では、VBAコードを実行してみます。

VBAで凡例を非表示にできました

VBAで凡例を非表示にできました。

凡例の書式設定

凡例の設定には、「位置」や、「背景色」、「枠線」の設定があります。

凡例の設定について、詳細はこちらでまとめています。

軸ラベルを設定する

「縦軸ラベル」と「横軸ラベル」を設定してみます。

「縦軸ラベル」を設定する

「縦軸ラベル」を設定するには、「.Axes(xlValue, 1).HasTitle」を使います。

「縦軸の第1軸」としたいので「.Axes(xlValue, 1)」としています。

Sub TEST14()
    
    '縦軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1)
        .HasTitle = True '軸ラベルを表示
        .AxisTitle.Text = "売上"
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

VBAで「縦軸ラベル」を設定できました

VBAで「縦軸ラベル」を設定できました。

「縦軸ラベル」を非表示にする

「縦軸ラベル」を非表示にするには、「.Axes(xlValue, 1).HasTitle = False」とします。

Sub TEST15()
    
    '縦軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, 1)
        .HasTitle = False '軸ラベルを非表示
    End With
        
End Sub

では、VBAコードを実行してみます。

VBAで「縦軸ラベル」を非表示にできました

VBAで「縦軸ラベル」を非表示にできました。

次は、「横軸ラベル」を設定してみます。

「横軸ラベル」を設定する

「横軸ラベル」を設定するには、「.Axes(xlCategory, 1).HasTitle = True」とします。

今度は、「横軸の第1軸」としたいので、「.Axes(xlCategory, 1)」とします。

Sub TEST16()
    
    '横軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, 1)
        .HasTitle = True '軸ラベルを表示
        .AxisTitle.Text = "支店"
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

VBAで「横軸ラベル」を設定できました

VBAで「横軸ラベル」を設定できました。

「横軸ラベル」を非表示にする

Sub TEST17()
    
    '横軸の第1軸
    With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, 1)
        .HasTitle = False '軸ラベルを表示
    End With
        
End Sub

VBAで「横軸ラベル」を非表示にできます。

VBAで「横軸ラベル」を非表示にできました

VBAで「横軸ラベル」を非表示にできました。

軸ラベルの書式設定

軸ラベルの書式設定には、「テキストの入力」や「文字の書式」、「背景色の書式」、「枠線の書式」など、設定できる項目があります。

軸ラベルは、「第1軸のラベル」だけでなく「第2軸のラベル」も設定できます。

軸ラベルの設定について、詳細はこちらでまとめています。

軸を設定する

VBAでグラフの「軸」を設定することもできます。

グラフの軸としては、次の4つがあります。

  • 横軸の第1軸
  • 縦軸の第1軸
  • 横軸の第2軸
  • 縦軸の第2軸

という感じです。

グラフの軸の設定で、頻度が高いのが、「スケール」の設定です。

スケール以外にも、次のような設定があります。

  • 軸のスケール
  • 軸の文字の書式
  • 軸の表示形式
  • 軸の背景の書式
  • 軸の反転

などです。

軸の設定について、詳細はこちらでまとめています。

VBAで棒グラフの系列を設定

VBAで棒グラフの系列を設定してみます。

  • 系列の色
  • 系列のデータラベル

の2つを設定します。

系列の色を設定する

系列の「色」を設定してみます。

系列の「色」を設定する

系列の「色」を設定するには、「.SeriesCollection(1).Format.Fill」を使います。

Sub TEST18()
    
    '「1つ目」の系列の塗りつぶし
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Format.Fill
        .Visible = msoTrue '塗りつぶしあり
        .ForeColor.RGB = RGB(0, 255, 0) '緑
    End With
        
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

VBAで系列の「色」を設定できました

VBAで系列の「色」を設定できました。

系列の「色」を非表示にする

系列の「色」を非表示にするには、「.Visible = msoFalse」とします。

Sub TEST19()
    
    '「1つ目」の系列の塗りつぶし
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Format.Fill
        .Visible = msoFalse '塗りつぶしなし
    End With
        
End Sub

では、VBAコードを実行してみます。

VBAで系列の「色」を非表示にできました

VBAで系列の「色」を非表示にできました。

ポイント単位での設定

系列の「色」は、「ポイント単位での設定」することができます。

系列の設定について、詳細はこちらでまとめています。

データラベルを設定する

データラベルを設定してみます。

「データラベル」を表示する

「データラベル」を表示するには、「.HasDataLabels」を使います。

Sub TEST20()
    
    '1つ目の系列
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        .HasDataLabels = True 'データラベルを表示
        .DataLabels.Position = xlLabelPositionOutsideEnd '外側上
    End With
    
End Sub

グラフを用意しておきます。

グラフを用意しておきます

では、VBAコードを実行してみます。

VBAで「データラベル」を表示できました

VBAで「データラベル」を表示できました。

「データラベル」を非表示にする

「データラベル」を非表示にするには、「.HasDataLabels = False」です。

Sub TEST21()
    
    '1つ目の系列
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
        .HasDataLabels = False 'データラベルを非表示
    End With
    
End Sub

では、VBAコードを実行してみます。

VBAで「データラベル」を非表示にできました

VBAで「データラベル」を非表示にできました。

データラベルの書式設定

データラベルの「位置」の設定や、「ポイント単位での設定」、「文字サイズ」、「文字色」なども設定できます。

データラベルの設定について、詳細はこちらでまとめています。

おわりに

この記事では、棒グラフを作成する方法について、ご紹介しました。

棒ブラフを作成するには、

  • 元データを選択
  • グラフを挿入
  • グラフの種類を設定

という流れです。

グラフの書式設定で、

  • タイトルと凡例の設定
  • 軸ラベルの設定
  • 系列の色の設定
  • データラベルの設定

についてご紹介しました。

グラフの書式設定するVBAコードは、たくさんあるので、すべてVBAで設定すると大変です。

「ベース」となるグラフを作成しておいて、コピーして利用すると、効率的にグラフを操作できます。

グラフのコピーについて、詳細はこちらでまとめています。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す