VBAでワークシート上にあるグラフを、まとめて一括で操作する方法をご説明します。
サイズや位置、色などたくさんあるグラフを一括で処理したい事がよくあります。
グラフが1つ、2つであれば手作業でも簡単に変更できますが、グラフがたくさんあると、チャートエリアなど変更する内容によっては、「Ctrlキー+A」でまとめて選択して操作もできないため非常に大変です。
そんな作業をVBAで一括に変更することで、面倒な作業が大幅に改善されます。
その他のグラフの操作については下記記事をご覧ください。
- グラフの作成と詳細設定をする方法
- 作成済みのグラフのデータ範囲を変更する
- シートに作成済みの埋め込みグラフを取得する
- 選択したセルの行のデータを動的に次々グラフに反映させる方法
- 全てのシート上のグラフを一括で操作する方法
1.グラフを一括で操作する方法とサンプルコード
さっそくワークシート上のグラフを一括で操作する方法です。
グラフを一括で操作するには、「ChartObjects」コレクションオブジェクトをループで1つずつ処理していきます。
ループの対象がグラフのコレクションなので素直に「For Each In Next」を使用することをおすすめします。
ループの詳細については「 「For~Next」「Do~Loop」 ループの使い方 」をご覧ください。
グラフを操作する際にはグラフが設置されているシートを指定します。
グラフをループするサンプルコード
ワークシート上のグラフをループするコードです。
シート上に次のような3つのグラフを用意しました。
このグラフをループして、グラフの名前を取得します。
Sub Sample1()
Dim Cht As ChartObject
Dim ChtName As String
With ActiveSheet
For Each Cht In .ChartObjects 'グラフのコレクションをループ
ChtName = ChtName & Cht.Name 'グラフの名前を取得
Next
MsgBox ChtName 'グラフの名前を表示
End With
End Sub
コードの説明
ほとんどコメントに記載していますが、簡単に説明です。
「With ActiveSheet」でグラフが設置されているシートを指定ています。
もちろん他のシート名やインデックスで指定しても構いません。
「For Each Cht In .ChartObjects」でグラフのコレクションオブジェクトをループしています。
これでグラフが何個あってもすべてループします。
ループの中に処理を記述することで、すべてのグラフに一括で処理が出来ます。
2.グラフの設定を変更するサンプルコード
グラフをループして操作する方法がわかりましたので、少し具体的な処理のサンプルコードをご紹介したいと思います。
グラフの位置を一括で指定する方法
グラフの位置を等間隔に一括で指定するコードです。
グラフの位置を設定するには、「ChartObject」のTopプロパティとLeftプロパティで設定します。
数値で「x」「y」座標を指定する事も出来ますし、「A1」などのセルの番地でも指定できます。
ループで操作するには数値で指定した方がコードがすっきりします。
Sub Sample2()
Dim Cht As ChartObject
Dim ChtTop As Long
Dim ChtLeft As Long
ChtTop = 10 '最初のTOP位置
ChtLeft = 10 '最初のLEFT位置
With ActiveSheet
For Each Cht In .ChartObjects 'グラフのコレクションをループ
With Cht
.Top = ChtTop 'グラフのTOP位置
.Left = ChtLeft 'グラフのLEFT位置
End With
ChtTop = ChtTop + 150 '次のグラフのTOP位置
ChtLeft = ChtLeft + 150 '次のグラフのLEFT位置
Next
End With
End Sub
グラフの大きさを一括で指定する方法
位置の次は大きさです。
もちろん同時に指定しても大丈夫です。
グラフの大きさを設定するには、「ChartObject」のWidthプロパティとHeightプロパティで設定します。
次のようにセルでも指定出来ますし、位置同様に数値でも指定可能です。
Width = Range("G2:L13").Width
Height = Range("G2:L13").Height
Sub Sample3()
Dim Cht As ChartObject
Dim ChtWidth As Long
Dim ChtHeight As Long
ChtWidth = 100 'グラフの幅
ChtHeight = 100 'グラフの高さ
With ActiveSheet
For Each Cht In .ChartObjects 'グラフのコレクションをループ
With Cht
.Width = ChtWidth 'グラフの幅
.Height = ChtHeight 'グラフの高さ
End With
Next
End With
End Sub
小さくしすぎましたが、数値を変数で変更すれば少しずつ変更して好みの大きさに変更できます。
基本的にループの中に処理を記述します。
文頭にもリンクがありますが、グラフの操作はオブジェクトの構成など複雑な処理が多いので、詳細設定や基本設定については「グラフの作成と詳細設定をする方法」をご覧ください。
その他グラフ作成/操作カテゴリーに、各種グラフの作成方法などもありますのでご覧ください。