皆さんはExcelでデータを追加したあと、グラフの範囲を拡大したい時どうしていますか。
やるべきグラフの数が少なくグラフ内の系列も少なければ一つ一つ処理していけば良いですが、
データ数が多くなり、スクロールまでしているとかなり時間がかかる作業となります。
そこで、本記事ではマクロ初心者向けにワンボタンでグラフ範囲を更新する例を紹介します。
さらに複数系列や棒グラフの積み上げにも対応できます。
※マクロの実行は戻るボタンが使えないので、本マクロ実行時は保存してから実行してください。
出来上がるものイメージ
赤文字部分が追加部分です。
グラフ範囲 自動更新ボタンで範囲が一瞬で追加されます。(最終行が自動で取得できる仕様)
実際のマクロ例は次の章で紹介しています。
今回紹介するマクロは系列がいくつあっても対応できる点が強みです
元々のグラフに系列がいくつかある場合は自動でその系列すべてデータを更新してくれます。
まず始めに①データが1列目にある場合 ②データの開始位置が1列目でない場合
に分けて紹介します。
最後に積み上げ棒グラフでも自動で範囲を追加する+データラベルの表示テクニックについて紹介します。
①グラフの範囲を自動で更新するマクロ
①のマクロで編集必要な部分は ”グラフの名前” のみです。
はじめの方のA, B, C, Tの値は1列目にデータがある場合は特に変更不要です。
Sub グラフ範囲自動更新1()
Dim i As Long, F As String, lngMax As Long
A = 1 'どこまでデータが入っているかのカウント用
B = 1 'データ開始の行数
C = 1 'データのはじめの列数
T = 0 '軸とデータの間
lngMax = Cells(Rows.Count, A).End(xlUp).Row - C + 1
With ActiveSheet.ChartObjects("グラフの名前").Chart
For i = 1 To .SeriesCollection.Count
.SeriesCollection(i).Formula = _
"=SERIES(" & _
Cells(C, i + B + T).Address(External:=True) & "," & _
Cells(C + 1, B).Resize(lngMax + C- 1, 1).Address(External:=True) & "," & _
Cells(C + 1, i + B + T).Resize(lngMax - 1, 1).Address(External:=True) & "," & _
i & ")"
Next i
End With
End Sub
②データのスタート位置がまちまちな場合のマクロ
1列目からデータがあるわけでなく、離れた位置にデータがある場合を想定しています。
②のマクロで編集必要な部分は ”グラフの名前” 、A, B, C, Tの値です。
A= 最終列を取得する時に使う行番号(A列なら1)
B= xのデータが始まる行番号(J列なら10)
C=データがはじまる列数
T=Bから数えてデータが始まる行数(軸とデータの間に余分な行がある場合)
Sub グラフ範囲自動更新2()
Dim i As Long, F As String, lngMax As Long
A = 10 'どこまでデータが入っているかのカウント用
B = 10 'データ開始の行数
C = 1 'データのはじめの列数
T = 0 '軸とデータの間
lngMax = Cells(Rows.Count, A).End(xlUp).Row - C + 1
With ActiveSheet.ChartObjects(”グラフの名前”).Chart
For i = 1 To .SeriesCollection.Count .SeriesCollection(i).Formula = _
"=SERIES(" & _ Cells(C, i + B + T).Address(External:=True) & "," & _
Cells(C + 1, B).Resize(lngMax + C - 1, 1).Address(External:=True) & "," & _
Cells(C + 1, i + B + T).Resize(lngMax - 1, 1).Address(External:=True) & "," & _
i & ")"
Next i
End With
End Sub
(おまけ)積み上げ棒グラフで自動範囲追加+データラベルの表示テクニック
データラベルは棒グラフの上に設置できると綺麗に見えます。
しかしながらエクセルの機能ではラベル位置は「外側」「中央」「内側」しか選択できません。
そこで、小技としてラベル用のデータを用意して積み上げ棒グラフを作成する方法があります。
→Y値を2重で選択することもできます(ラベル用の行はいらなくなる)
ラベル用のデータでラベルを追加、ラベル位置は「内側」で設定します。
あとはラベル用の棒ブラフを透明色にすれば、何ごともなかったように
目的のグラフ真上にラベルを設置することができます。