ExcelマクロVBA入門 | 第96回.グラフ(Chart) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2013-09-04

第96回.グラフ(Chart)


グラフの扱いになります。


全てをマクロで作成しようとすると、かなり困難ですので、


雛形のグラフを作成しておき、マクロで必要な部部のみ変更するようにした方が良いでしょう。



グラフの全てを説明する事はできませんので、以下のサンプルを元に解説します。



この表を元に、棒グラフと、折れ線グラフの2軸グラフを作成します。


まずは、ただの棒グラフを作る場合です。

Sub sample1()
  Dim chartObj As ChartObject
  Dim MyRange As Range
  Set MyRange = Range("A1").CurrentRegion
  Set chartObj = ActiveSheet.ChartObjects.Add(MyRange.Width, MyRange.Top, 300, 200)
  With chartObj.Chart
    .SetSourceData MyRange
    .ChartType = xlColumnClustered
  End With
End Sub


ChartObject オブジェクトは、Chart オブジェクトのコンテナーです。


コンテナーはグラフの入れ物として、グラフの外観と大きさを制御します


chartObj.Chart


Chart オブジェクトのコンテナー内の、Chartオブジェクトになります。


Chartオブジェクトのプロパティとメソッド

メソッド Activate 指定されたグラフをアクティブにします。
ApplyChartTemplate 標準またはユーザー設定のグラフの種類をグラフに適用します。
ApplyDataLabels グラフのすべての系列にデータ ラベルを適用します。
ApplyLayout リボンに表示されるレイアウトを適用します。
Axes グラフの 1 つの軸または軸のコレクションを表すオブジェクトを取得します。
ChartGroups オブジェクトを返すメソッドです。単一のグラフ種類グループ (ChartGroup オブジェクト)、またはグラフ種類グループのコレクション (ChartGroups コレクション) を返します。コレクションの中には、すべてのグループの種類が含まれます。
ChartObjects オブジェクトを返すメソッドです。単一の埋め込みグラフ (ChartObject オブジェクト)、またはシートにあるすべての埋め込みグラフのコレクション (ChartObjects コレクション) を返します。
ChartWizard 任意のグラフのプロパティを変更します。このメソッドを使用すると、すべてのプロパティを個別に設定せずに、短時間でグラフを書式設定できます。このメソッドは非対話型で、指定したプロパティのみを変更します。
CheckSpelling オブジェクトのスペルをチェックします。
ClearToMatchStyle グラフ要素の書式をクリアして自動に設定します。
Copy シートをブック内の他の場所にコピーします。
CopyPicture 選択しているオブジェクトを図としてクリップボードにコピーします。
Delete オブジェクトを削除します。
Evaluate 使用する名前を、オブジェクトまたは値に変換します。
Export グラフを画像ファイルとしてエクスポートします。
ExportAsFixedFormat 指定された形式のファイルにエクスポートします。
GetChartElement 指定された x 座標および y 座標のグラフ要素についての情報を返します。このメソッドは、最初の 2 つの引数だけに値を指定するという点でほかのメソッドと異なります。ほかの引数の値を自動的に設定し、メソッドが情報を返すときに、コードでこれらの値を調べられるようにします。
Location グラフを新しい位置に移動します。
Move グラフをブック内の他の場所に移動します。
OLEObjects オブジェクトを返すメソッドです。グラフやシートにある、単体の OLE オブジェクト (OLEObject オブジェクト)、またはすべての OLE オブジェクトのコレクション (OLEObjects コレクション) を返します。値の取得のみ可能です。
Paste グラフのデータをクリップボードから指定のグラフに貼り付けます。
PrintOut オブジェクトを印刷します。
PrintPreview オブジェクトの印刷プレビュー (印刷時のイメージ) を表示します。
Protect グラフを変更できないように保護します。
Refresh 指定されたグラフを直ちに再描画します。
SaveAs グラフまたはワークシートへの変更を別のファイルに保存します。
SaveChartTemplate 使用可能なグラフ用テンプレートの一覧に、ユーザー設定テンプレートを保存します。
Select オブジェクトを選択します。
SeriesCollection オブジェクトを返すプロパティです。グラフまたはグラフ種類グループにある単一のデータ系列 (Series オブジェクト)、またはすべてのデータ系列のコレクション (SeriesCollection コレクション) を返します。
SetBackgroundPicture グラフの背景のグラフィックスを設定します。
SetDefaultChart グラフを新規に作成するときに使われるグラフ テンプレートの名前を指定します。
SetElement グラフのグラフ要素を設定します。値の取得および設定が可能です。MsoChartElementType クラスの定数を使用します。
SetSourceData グラフの参照元のデータ範囲を設定します。
Unprotect シートまたはブックの保護を解除します。保護されていないシートやブックに対しては、このメソッドは無効です。
プロパティ Application 対象となるオブジェクトが指定されない場合は、Excel アプリケーション (Application オブジェクト) を返します。対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。値の取得のみ可能です。
AutoScaling True の場合、3-D グラフのサイズを、2-D グラフであった場合に最も近い大きさに調節します。このプロパティを使用するには、RightAngleAxes プロパティが True である必要があります。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
BackWall 3-D グラフの背壁の書式を個々に設定できる Walls オブジェクトを取得します。値の取得のみ可能です。
BarShape 指定された 3-D 横棒グラフまたは縦棒グラフで使用する形状を設定します。値の取得および設定が可能です。XlBarShape クラスの定数を使用します。
ChartArea グラフのグラフ エリア全体を表す ChartArea オブジェクトを返します。値の取得のみ可能です。
ChartStyle グラフのスタイルを取得または設定します。値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。
ChartTitle 指定されたグラフのタイトルを表す ChartTitle オブジェクトを取得します。値の取得のみ可能です。
ChartType グラフの種類を設定します。値の取得および設定が可能です。XlChartType クラスの定数を使用します。
CodeName オブジェクトのコード名を返します。値の取得のみ可能です。文字列型 (String) の値を使用します。
Creator 現在のオブジェクトが作成されたアプリケーションを示す 32 ビットの整数を取得します。値の取得のみ可能です。長整数型 (Long) の値を使用します。
DataTable グラフ データ テーブルを表す DataTable オブジェクトを取得します。値の取得のみ可能です。
DepthPercent 3-D グラフの奥行を、グラフの幅に対するパーセンテージで設定します (使用できる値の範囲は 20 〜 2000)。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
DisplayBlanksAs グラフへの空白セルのプロット方法を設定します。使用できる定数は、XlDisplayBlanksAs クラスの定数のいずれかです。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Elevation 3-D グラフで、グラフを見る視線とグラフの床面との角度 (°) を設定します。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Floor 3-D グラフの床面を表す Floor オブジェクトを取得します。値の取得のみ可能です。
GapDepth 3-D グラフのデータ系列間の距離を設定します。値はマーカーの幅に対するパーセント値 (%) です。このプロパティに使用できる範囲は 0 〜 500% の値です。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
HasAxis グラフの軸を設定します。値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。
HasDataTable True の場合、グラフにデータ テーブルを追加します。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
HasLegend True の場合、グラフに凡例を表示します。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
HasTitle True の場合、軸やグラフのタイトルを表示します。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
HeightPercent 3-D グラフの高さをグラフの幅に対するパーセント値 (%) で設定します。使用できる範囲は、5 〜 500 の値です。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
Hyperlinks グラフのハイパーリンクを表す Hyperlinks コレクションを返します。
Index 類似するオブジェクトのコレクション内でのオブジェクトのインデックス番号を表す長整数型 (Long) の値を返します。
Legend グラフの凡例を表す Legend オブジェクトを返します。値の取得のみ可能です。
MailEnvelope 文書の電子メール ヘッダーを表します。
Name オブジェクトの名前を表す文字列型 (String) の値を取得、または設定します。
Next 次のシートを表す Worksheet オブジェクトを取得します。
PageSetup 指定されたオブジェクトのすべてのページ設定情報を含む PageSetup オブジェクトを取得します。値の取得のみ可能です。
Parent 指定されたオブジェクトの親オブジェクトを取得します。値の取得のみ可能です。
Perspective 3-D グラフの奥行きを表す長整数型 (Long) の値を取得、または設定します。
PivotLayout ピボットテーブル レポートのフィールド配置とピボットグラフ レポートの軸配置を表す PivotLayout オブジェクトを返します。値の取得のみ可能です。
PlotArea グラフのプロット エリアを表す PlotArea オブジェクトを取得します。値の取得のみ可能です。
PlotBy グラフ上で列または行をデータ系列として使用する方法を設定します。使用できる定数は、XlRowCol クラスの xlColumns または xlRows です。値の取得および設定が可能です。長整数型 (Long) の値を使用します。
PlotVisibleOnly True の場合、可視セルだけをプロットします。False の場合、非表示のセルもプロットします。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
Previous 次のシートを表す Worksheet オブジェクトを取得します。
PrintedCommentPages 現在のグラフに対して印刷されるコメント ページの数を返します。値の取得のみ可能です。
ProtectContents True の場合、シートの内容を保護しています。グラフが対象の場合、グラフ全体が保護されています。対象オブジェクトの保護をオンにするには、Protect メソッドの引数 Contents に True を設定します。値の取得のみ可能です。ブール型 (Boolean) の値を使用します。
ProtectData True の場合、ユーザーにデータ系列式を変更できないようにします。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
ProtectDrawingObjects True の場合、描画オブジェクトを保護しています。描画オブジェクトの保護をオンにするには、Protect メソッドの引数 DrawingObjects に True を設定します。値の取得のみ可能です。ブール型 (Boolean) の値を使用します。
ProtectFormatting True の場合、ユーザーにグラフの書式を変更できないようにします。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
ProtectionMode True の場合、画面上での変更に対してのみの保護が設定されています。ユーザー インターフェイスの保護をオンにするには、Protect メソッドの引数 UserInterfaceOnly に True を設定します。値の取得のみ可能です。ブール型 (Boolean) の値を使用します。
ProtectSelection True の場合、グラフの要素を選択できないようにします。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
RightAngleAxes True の場合、グラフの回転角や仰角とは関係なく、軸が直行しています。このプロパティの対象は、3-D 折れ線グラフ、3-D 縦棒グラフ、および 3-D 横棒グラフだけです。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
Rotation 3-D グラフの回転角 (プロット エリアの z 軸周りの回転角度) を設定します。このプロパティに使用できる範囲は、0 〜 360 の角度 (°) です。ただし、3-D 棒グラフの場合、使用できる範囲は、0 〜 44 の値です。既定値は 20 です。値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。
Shapes グラフ シートのすべての図形を表す Shapes コレクションを返します。値の取得のみ可能です。
ShowAllFieldButtons ピボットグラフにすべてのフィールド ボタンを表示するかどうかを設定します。値の取得および設定が可能です。
ShowAxisFieldButtons ピボットグラフに軸フィールド ボタンを表示するかどうかを設定します。値の取得および設定が可能です。
ShowDataLabelsOverMaximum 値が数値軸の最大値より大きい場合にデータ ラベルを表示するかどうかを設定します。値の取得および設定が可能です。ブール型 (Boolean) の値を使用します。
ShowLegendFieldButtons ピボットグラフに凡例フィールド ボタンを表示するかどうかを設定します。値の取得および設定が可能です。
ShowReportFilterFieldButtons ピボットグラフにレポート フィルター フィールド ボタンを表示するかどうかを設定します。値の取得および設定が可能です。
ShowValueFieldButtons ピボットグラフに値フィールド ボタンを表示するかどうかを設定します。値の取得および設定が可能です。
SideWall 3-D グラフの側壁の書式を個々に設定できる Walls オブジェクトを取得します。値の取得のみ可能です。
Tab グラフの Tab オブジェクトを返します。
Visible オブジェクトを表示するかどうかを表す XlSheetVisibility クラスの定数を取得、または設定します。
Walls 3-D グラフの壁面を表す Walls オブジェクトを取得します。値の取得のみ可能です。


というように、非常に多くのプロパティがありますので、とても全てを把握する事は困難です。


変更したいプロパティやメソッドのみ、都度調べれば良いでしょう。



今回は、2軸グラフを作る事と、グラフタイトルをA1セルにリンクさせます。

Sub sample2()
  Dim chartObj As ChartObject
  Dim MyRange As Range
  Set MyRange = Range("A1").CurrentRegion
  Set chartObj = ActiveSheet.ChartObjects.Add(MyRange.Width, MyRange.Top, 300, 200)
  With chartObj.Chart
    .SetSourceData MyRange
    .SeriesCollection(1).ChartType = xlColumnClustered
    .SeriesCollection(2).ChartType = xlLineMarkersStacked
    .SeriesCollection(1).AxisGroup = 1
    .SeriesCollection(2).AxisGroup = 2
    .HasTitle = True
    .ChartTitle.Text = "=" & MyRange.Cells(1, 1).Address(ReferenceStyle:=xlR1C1, External:=True)
  End With
End Sub


.SeriesCollection(1).ChartType = xlColumnClustered
.SeriesCollection(2).ChartType = xlLineMarkersStacked


この部分で、系列毎に、グラフの種類を変更しています。


最初の棒グラフの場合は、


.ChartType = xlColumnClustered


このように、Chartオブジェクトに対して、グラフ種類を指定しましたが、


今度は、グラフの系列に対して指定している点に注意して下さい。


この種類で指定する定数は、XlChartTypeクラスの定数になります。


非常に多い事と、あまり使用しないものも多いので、ここでの紹介は割愛します。


ヘルプで、XlChartTypeクラスの定数を調べて下さい。



.SeriesCollection(1).AxisGroup = 1
.SeriesCollection(2).AxisGroup = 2


この部分で、系列毎に、第1軸と第2軸を変更しています。


.HasTitle = True


これで、タイトルを表示して、


.ChartTitle.Text = "=" & MyRange.Cells(1, 1).Address(ReferenceStyle:=xlR1C1, External:=True)


これで、タイトルをA1セルにリンクさせています。


引数の、ReferenceStyle:=xlR1C1, External:=True


この指定をしないと、バージョンによりエラーがでてしますます。



最初に説明した通り、マクロでグラフの全てを扱うのは困難ですので、


グラフはあらかじめ作成しておき、


データによって変更される部分等のみマクロで変更するようにすれば良いでしょう。



以下のページも参考にして下さい。


円グラフの色設定

グラフのデータ範囲を可変にする






同じテーマ「ExcelマクロVBA入門」の記事

第97回.図形(Shape)
第98回.Findメソッド(Find,FindNext,FindPrevious)
第99回.Replaceメソッド(置換)
第100回.InputBoxメソッド(インプットボックス)
第101回.Midステートメント
第102回.Intersectメソッド
第103回.Unionメソッド

新着記事 ・・・新着記事一覧を見る

画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)
並べ替え|Google Apps Script入門(12月12日)
メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)
セルのコピー&各種ペースト|Google Apps Script入門(11月22日)

アクセスランキング ・・・ ランキング一覧を見る

1.RangeとCellsの使い方|ExcelマクロVBA入門
2.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.変数とデータ型(Dim)|ExcelマクロVBA入門
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



  • >
  • >
  • >
  • グラフ(Chart)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP