本ページには広告が含まれています。

Excel VBA ピボットグラフを作成してみます

Excel VBA ピボットグラフを作成します

ピボットグラフは、ピボットという名前のとおりピボットテーブルを元にして作成できる埋め込みグラフのことです。せっかくピボットテーブルを勉強してきたのでグラフも簡単に作成できることも勉強しましょう。

くるみこ
くるみこ

今回は、ピボットテーブルからピボットグラフを作成する方法について勉強しましょう(^^)/

グラフって、私センスが無いから苦手なんですよね(^^;
苦手を克服できればいいなぁ。よろしくお願いします!

【この記事でわかること
・ピボットグラフの作成方法がわかります
・AddChart2メソッドを使ってグラフを作成する方法がわかります

前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ

くるみこ
くるみこ

前回記事は、ピボットテーブルの日付のグループ化についての解説と自動グループ化を解除する方法の解説記事でした。よければ覗いてみてね(^^)/

スポンサーリンク

ピボットグラフを作成する方法

初めに「マクロの記録」で記録したグラフと記録されたコードを見てみましょう。
※ Excel2016で実行した記録です。

「マクロの記録」で記録したグラフ
Sub Macro1()
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$3:$G$9")
End Sub

・ピボットテーブルのセルがアクティブな状態で「分析」タブの「ピボットグラフ」を押下
・通常のタテ棒グラフを選択して作成しました。
・記録されたコードは、たったの2行です。
Shapes.AddChart2メソッドでグラフの元を作成・選択しているようです。
201 は高さのポイント数のようです。
xlColumnClustered は、「集合縦棒」の定数ですね。
SetSourceData でデータ領域(ピボットテーブル領域)を適用しているようです。

Shepes.AddChart2 メソッド

Microsoft OfficaVBAリファレンスで Shapes.AddChart2 メソッドを調べてみました。
ドキュメントにグラフを追加します。グラフを表すShape オブジェクトを返し、指定されたコレクションに追加します」とのことです。

Shapes.AddChart2メソッドの構文/パラメーター/戻り値

構文

Shapes.addchart2(Style、xlcharttypeクラス、Left、Top、Width、Height、newlayout)

パラメーター
名前必須/
オプション
データ型説明
Style省略可能Variantグラフのスタイルです。 Xlcharttype で指定されている
グラフの種類を取得するには、”-1″ を使用します。
XlChartType省略可能Variantグラフの種類を、数値または定数で指定します。
left省略可能Variantグラフの左端の位置をポイント単位で指定します。
top省略可能Variantグラフの上端の位置をポイント単位で指定します。
Width省略可能Variantグラフのポイント単位の幅です。
HeightオプションVariantグラフのポイント単位の高さです。
NewLayout省略可能VariantNewLayoutTrue を指定した場合、タイトルはオン、
複数の系列がある場合は凡例がオンになります。

Height パラメーターがオプションと表記されていますが省略可能のようです
・試しに次のコードように「マクロの記録」のパラメーターを全て外して実行してみました。

Sub Macro1()
    ActiveSheet.Shapes.AddChart2.Select 'パラメーターを削除(201,xlColumnClustered)
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$3:$G$9")
End Sub

・実行結果は画像のとおりのグラフが作成されました。「グラフタイトル」が追加されています。

「マクロの記録」のパラメーターを全て外して実行してできたグラフ
戻り値

戻り値はShapeオブジェクトです。

Xlcharttype で指定できるグラフの種類

Xlcharttype クラス列挙体 (Excel)で定数が指定されています。
・74種類あるようです。
・「定数名」か「値」で指定できます。
・下表は主なグラフ種類だけ表示しています。詳細はこのリンク先、Microsoftのリファレンスを参考して確認して下さい

定数名グラフ種類
xlcolumnclustered51集合縦棒
xlColumnStacked52積み上げ縦棒
xlbarclustered57集合横棒
xlBarStacked10059100%積み上げ横棒
xlpie5円グラフ
xlLine2/4折れ線

Chart.SetSourceData メソッド

・グラフに使用するソース データの範囲を設定します。
・これを指定しないで、AddChart2メソッドだけを実行するとグラフの実体が無い、枠(フィールド)だけが作成されます。
・AddChart2メソッドとセットで使う必要があるということですね。

Chart.SetSourceData メソッドの構文/パラメーター

構文

Chart.SetSourceData(SourcePlotBy)
・「マクロの記録」の参考例:SetSourceData Source:=Range(“Sheet1!$A$3:$G$9”)はセル範囲の指定になっています。
ここは、セル範囲でなく次のようにピボットテーブルのデータ領域指定に変更します
SetSourceData Source:=ActiveSheet.PivotTables(1).DataBodyRange
こうしておけば、データ変更への対応に苦労しなくて済みます

パラメーター
名前必須/
オプション
データ型説明
Source必須Range元データを含むセル範囲を指定します。
PlotBy省略可能Variantデータをプロットする方法を指定します。
xlColumns または xlRows のいずれかです。

サンプルコードで折れ線グラフを作成してみます

折れ線グラフは「xlLineを指定すれば作成できることがわかりましたので動作確認してみます。
・「マクロの記録」を次のように汎用で使えるように改造して利用します
Shepe オブジェクトを変数に代入するようにします。
Source にはピボットテーブルの DataBodyRange でデータ領域を指定します

Sub AddChartSample()
    Dim pvtChart As Shape
    With ActiveSheet
        Set pvtChart = .Shapes.AddChart2(XlChartType:=xlLine) '折れ線グラフ
        pvtChart.Chart.SetSourceData Source:=.PivotTables(1).DataBodyRange
    End With
End Sub
サンプルコードで作成した「折れ線グラフ」

・特にサイズなどは指定しないで作成していますので、必要に応じて追加指定します。
AddChart2(XlChartType:=xlLine) の部分に他のパラメーターを追加して指定します。
一度手動で調整してサイズを確認しておいて指定してもよいでしょう。最初からマクロで何度もテストするよりも、むしろその方が良いと思います。

少し内容が軽いですが、ひとまずグラフは作成できるようになったので今回は以上で終了します。

まとめ(おわりに)

・いかがでしたでしょうか?
「いつも汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーを念頭に記事を書いています。
・今回も、記事内で使用したコードのサンプルファイルを登録していますのでご利用ください。
今までの記事のサンプルも登録していますのでよろしければお使いください(^^)

まとめと感想など

くるみこ
くるみこ

どうですか。とりあえずはグラフを作成できるところまで行きましたね。意外と簡単でしたね(^^)

そうですね。作るところまでは本当に簡単なんですね(^^)
でも、ここから見栄えを良くするのが大変なんですよね。これを参考にもっといろいろ試して勉強してみます(^-^;

くるみこ
くるみこ

ここまでピボットテーブルについて勉強してきましたが、実は今回のこの記事がこのブログを始めてから丁度100記事目でした!
次回、何にするかまだ決めていませんが、お役に立てる記事を目指して今後も継続していきます。これからもよろしくお願いしますm(_ _)m

【今回わかったことは】
・ピボットグラフの作成方法がわかりました
・AddChart2メソッドを使ってグラフを作成する方法がわかりました
・細かい設定は手動で行ってからその設定値を利用する方法がおすすめです

★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/

スポンサーリンク
スポンサーリンク

記事のサンプルファイルをダウンロードできます

今回の記事のサンプルをダウンロードできるようリンク先に登録しています

過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください