• VBAでグラフを自動的に作るにはどうすればいいの?
  • ボタンを押して実行したい
  • コピペで作業できるようにしてほしい

この記事ではExcelVBAで「対象のデータからグラフを自動で作成する」サンプルコードを紹介します。

記事内のサンプルコードをコピペして設定するだけで、作業の自動化が可能です。

また、このサンプルコード内の処理についても、詳しく解説しています。

ご参考までに、それではどうぞ。

対象のデータからグラフを自動で作成する

'グラフの対象データ範囲を定義
Dim trgtSh As Worksheet
Set trgtSh = ThisWorkbook.Worksheets("グラフ自動作成")
Dim dataRng As Range
Set dataRng = trgtSh.Range("F15:R16")
'貼り付けたいセルを定義
Dim pasteRng As Range
Set pasteRng = trgtSh.Range("G2")

'グラフ作成
With trgtSh.Shapes.AddChart.Chart
    'グラフの種類を指定(ここでは「集合縦棒」)
    .ChartType = xlColumnClustered
    'グラフの対象データ範囲を指定
    .SetSourceData dataRng
    'グラフタイトルを設定
    .HasTitle = True
    .ChartTitle.Text = "売上金額推移"
    
    'グラフの位置を指定
    .Parent.Top = pasteRng.Top
    .Parent.Left = pasteRng.Left
End With

 

▼実行前

▼実行後

今回のコードでは、画像のようにボタンを押すと対象のデータから自動でグラフを作成することができます。

順に解説します。

マクロを実行できるボタンの設置方法

まずコード解説の前に、ボタンの設置方法を解説します。

「開発」タブ、「挿入」をクリックして、フォームコントロール内の「ボタン(フォームコントロール)」をクリックしてください。

※「開発」タブがない場合は、「ファイル」内「オプション」から「リボンのユーザー設定」を選択し、「開発」にチェックを入れて「OK」を押してください。

「ボタン(フォームコントロール)」をクリックした状態で通常のオートシェイプと同じようにシート上をドラッグアンドドロップすることで、任意の大きさのボタンを設置することができます。

ドラッグアンドドロップでボタンを設置すると画像のダイアログが表示されるので、テキストファイル読込マクロの名前(画像では「AddChart」)を指定して「OK」をクリックしてください。

その後、ボタンが表示されるので右クリックから「テキストの編集」を選択して、ボタン名を任意の名前に書き換えてください。

これでクリックするとマクロが実行されるボタンが設置できました。

対象のデータからグラフを自動で作成するコードの解説

グラフ作成に使用する変数を定義

はじめに、グラフの対象データや貼り付け位置など、グラフ作成時に使用する変数を定義しています。

'グラフの対象データ範囲を定義
Dim trgtSh As Worksheet
Set trgtSh = ThisWorkbook.Worksheets("グラフ自動作成")
Dim dataRng As Range
Set dataRng = trgtSh.Range("F15:R16")
'貼り付けたいセルを定義
Dim pasteRng As Range
Set pasteRng = trgtSh.Range("G2")

グラフの対象データ範囲は「dataRng」、グラフの貼り付け位置は「pasteRng」に指定しています。

グラフの作成と編集

続いて、グラフ作成とその後に続くグラフ編集部分を解説します。

'グラフ作成
With trgtSh.Shapes.AddChart.Chart
    'グラフの種類を指定(ここでは「集合縦棒」)
    .ChartType = xlColumnClustered
    'グラフの対象データ範囲を指定
    .SetSourceData dataRng
    'グラフタイトルを設定
    .HasTitle = True
    .ChartTitle.Text = "売上金額推移"
    
    ~~~
End With

まず、1行目の「With 〇〇 ~ End With」ステートメントの部分ですが、これは「○○」の部分に入れたオブジェクト名を「.」のみで書くことができる記法です。

例えば「.ChartType = xlColumnClustered」は「trgtSh.Shapes.AddChart.Chart.ChartType = xlColumnClustered」と同じ意味です。

ここで省略されている「trgtSh.Shapes.AddChart.Chart」の部分でグラフを作成しています。さらに、このオブジェクトを「With」に指定することで、その後も続けて同じオブジェクトを操作することになります。

まず「.ChartType = xlColumnClustered」の部分で、グラフの種類「ChartType」を集合縦棒「xlColumnClustered」に指定しています。

グラフの種類については、数多くありますが、ここでは代表的な3つを紹介します。

No 定数 グラフの種類
1 xlColumnClustered 集合縦棒
2 xlLine 折れ線
3 xlPie

次に「.SetSourceData dataRng」でデータ範囲として定義している「dataRng」をグラフのデータに設定します。

最後に、「.HasTitle = True」でグラフタイトルを表示し「.ChartTitle.Text = "売上金額推移"」でタイトル文字列を「売上金額推移」に書き換えています。

グラフ位置修正

最後に、対象のグラフを任意の位置に移動させる方法を解説します。

'グラフ作成
With trgtSh.Shapes.AddChart.Chart
    ~~~
    
    'グラフの位置を指定
    .Parent.Top = pasteRng.Top
    .Parent.Left = pasteRng.Left
End With

 

貼り付け位置として定義した「pasteRng」をグラフの左上端として設定します。

この時に使用するのが、「Top」「Left」プロパティなのですが、これは「ChartObjects」オブジェクトに含まれるプロパティです。

また、上記コードで「With ~ End With」で省略されている「Chart」オブジェクトも、この「ChartObjects」オブジェクトに含まれるプロパティです。

省略されている「Chart」オブジェクトの親オブジェクトを指定する必要があり、この時に使われるのが「Parent」プロパティです。その名の通り「○○.Parent」で任意のオブジェクトの親オブジェクトを取得することができます。

ですので、ここでは「.Parent.Top(Left)」とすることで、作成したグラフの左端、上端の位置を「pasteRng」に移動させています。

 

以上、コピペでできるExcelVBAでの「対象のデータからグラフを自動で作成する」方法の紹介でした。

コード内で解説した各種プロパティ、ステートメントもコピペで使えますので、試してみてください。

 

Excel最強時短仕事術