Excelはグラフを簡単につくれるのも魅力ですが、つくらなければいけないグラフが多いと、この作業も大変。
今回は大量のグラフが効率よく、ささっと作れてしまう方法を紹介していきます!
今回の問題にどう対処するか?
実はこの問題、Excelのマクロ活用すると簡単に処理できるんですよ。
大量のグラフを効率よく作成したいあなた!
是非この記事で紹介する方法を試してみてくださいね。
このページの中では、今回紹介する大量のグラフ一度に作成できるマクロを組み込んだExcelファイルをダウンロードできるようにしています。
これを使えば、一からExcelを作り込む必要もありませんよ。ファイルを手にした瞬間、作業スピードは一気に早まります!是非使ってみてくださいね。
では本編スタートです!
Contents
『大量のグラフを一度に自動作成する』には?まずは問題を整理しよう!
今回解決するのは、大量のグラフを作成するという大変な作業を、手軽に、すばやく、そして自動で終わらせるという課題。今回は特に「散布図」の作成に焦点をあてますよ。
この作業を手作業で行うには、
- 空のグラフを作って、軸のタイトル、凡例のなどを設定
- 系列を追加し、名前、X、Yのデータの範囲を指定
- 系列の表示に関する設定(マーカーや線の色等)を変更
- 系列を追加する作業を表示するデータの数だけ繰り返し、グラフを完成させ、
- 作成するグラフの数だけこれを繰り返す
という手順をとるのが普通なのではないでしょうか。一つのグラフに含める系列が多いときなど、3.の作業が面倒で大変なんですよね~。2.の作業も参照先を間違えたりする可能性もあり、設定とチェックが大変です。
今回紹介するサンプルでは、9個の系列が含まれた散布図を6つ作りますが、これを手作業で作ったら20分くらいはかかってしまうのではないでしょうか。
グラフをつくるだけで貴重な時間をこんなに使ってはもったいないですので、この手順をExcelで自動化してしまいましょう!
『自動で大量にグラフを作成する』方針をチェック!
ここでは、散布図を大量に自動で作成する作業をExcelに実施させるためにはどうすればよいかをみていきます。
この作業を手作業で行うには、
- 空のグラフを作って、軸のタイトル、凡例のなどを設定
- 系列を追加し、名前、X、Yのデータの範囲を指定
- 系列の表示に関する設定(マーカーや線の色等)を変更
- 系列を追加する作業を表示するデータの数だけ繰り返し、グラフを完成させ、
- 作成するグラフの数だけこれを繰り返す
という手作業が必要でしたよね?
今回はこの手順をExcelのマクロ(VBA)をつかって自動で行っていくことにしましょう。
まずは下準備。Excelシート上に、下の図のようにグラフ化するデータを整理しましょう。これは普通に行う作業ですね。
(出典:気象庁ホームページ https://www.data.jma.go.jp/gmd/risk/obsdl/index.php)
次に、作成するグラフに関する設定を行います。Input Boxを使ったり、プログラムソーズに直接書き込んで設定しても良いのでしょうが、設定項目が多いですし、簡単に設定が変えられるものが良いと思いましたので、今回紹介するサンプルでは、下の設定項目をシート内に書き込んでおく形式にしました。
- 作成するグラフの数、この中に入れる系列の数、グラフの大きさ
- X軸、Y軸のラベル名、最大値、最小値、主メモリ
- 系列の名前、Xとして参照するデータの範囲(初めのセルと最後のセルを指定)、Yとして参照するデータの範囲(同じく初めのセルと最後のセルを指定)
ここまでできたら、これらのデータ、設定をマクロで読み込んで、次の手順で散布図を作っていきます。
- 作成するグラフの数、系列の数、グラフの大きさを読み込む
- 作成するグラフのX軸とY軸の設定値を読み込む
- 新規グラフを作成し、X軸ラベルを追加し表示する文字を設定
- Y軸ラベルを追加し表示する文字を設定
- X軸の最小値、最大値、主メモリ、Y軸との交点を設定
- X軸の目盛りの表示を日付形式に変更
- Y軸の最小値、最大値、主メモリ、X軸との交点を設定
- 系列を追加し、系列名、Xの参照先、Yの参照先を設定し、線、マーカーの書式を設定
- 系列の追加を指定の数だけ繰り返して、凡例を追加し、この書式を設定
- 凡例の位置とプロットエリアの位置を調整
- 3~10を作成するグラフの数だけ繰り返し
これをVBAで書けば今回の「大量のグラフを作成する」という作業は一発で一瞬で完了!
しかも処理はプログラムした内容に従って、いつでも何度でも実施できるので、処理を間違ってしまうということもありません!
『大量の散布図を自動作成』をExcelで実現!
では大量のグラフ(散布図)を自動で作成するという課題を解決する、具体的なマクロの記述をみていきましょうね!VBAで書いたリストは次の通りです!
Excel 2013よりも前のExcelをお使いの方は、ソース内のコメントに従って、修正して使ってくださいね。
'***********************************************************
'** 仕事サクサク!定時退社のために EXCEL GO! GO!
'** (URL:https://excelgogo.net/)
'** 是非ご活用ください♪
'***********************************************************
Sub 散布図を自動作成する()
'
Dim Numofgraph As Integer, Numofseries As Integer
Dim Xaxistitle(20) As String, Xmin(20) As Double
Dim Xmax(20) As Double, Xmajorunit(20) As Double
Dim Yaxistitle(20) As String, Ymin(20) As Double
Dim Ymax(20) As Double, Ymajorunit(20) As Double
Dim RGB1(10) As Long
Dim Graphwidth As Integer
Dim Graphheight As Integer
'
On Error GoTo errhandler
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'
'作成するグラフの数、系列の数、グラフの大きさを読み込む
Numofgraph = Cells(1, 2) '最大20に設定
Numofseries = Cells(2, 2) '最大10に設定
Graphwidth = Cells(3, 2)
Graphheight = Cells(4, 2)
'
'作成するグラフのX軸とY軸の設定値を読み込む
For i = 1 To Numofgraph
Xaxistitle(i) = Cells(6, 1 + i)
Xmin(i) = Cells(7, 1 + i)
Xmax(i) = Cells(8, 1 + i)
Xmajorunit(i) = Cells(9, 1 + i)
Yaxistitle(i) = Cells(11, 1 + i)
Ymin(i) = Cells(12, 1 + i)
Ymax(i) = Cells(13, 1 + i)
Ymajorunit(i) = Cells(14, 1 + i)
Next
'
'系列の色を設定
RGB1(1) = RGB(0, 0, 0)
RGB1(2) = RGB(255, 0, 0)
RGB1(3) = RGB(255, 192, 0)
RGB1(4) = RGB(146, 208, 80)
RGB1(5) = RGB(0, 176, 80)
RGB1(6) = RGB(0, 176, 240)
RGB1(7) = RGB(0, 112, 192)
RGB1(8) = RGB(0, 32, 96)
RGB1(9) = RGB(112, 48, 160)
RGB1(10) = RGB(255, 0, 255)
'
For i = 1 To Numofgraph
'グラフを作成
'AddChart2(スタイル:固定, 種類:固定,左の位置,上の位置,幅,高さ)
ActiveSheet.Shapes.AddChart2(-1, xlXYScatterLines, 1170, _
Graphheight * (i - 1), Graphwidth, Graphheight).Select
'************Excel2010まではこちらを利用************************
'AddChart(種類:固定,左の位置,上の位置,幅,高さ)
' ActiveSheet.Shapes.AddChart(xlXYScatterLines, 1170, _
' Graphheight * (i - 1), Graphwidth, Graphheight).Select
'***************************************************************
With ActiveChart '軸ラベルを追加する
With .Axes(xlCategory) 'X軸ラベルの追加
.HasTitle = True
.AxisTitle.Text = Xaxistitle(i)
End With
With .Axes(xlValue) 'Y軸ラベルを追加
.HasTitle = True
.AxisTitle.Text = Yaxistitle(i)
End With
'************Excel2010までは次の行をコメントアウト**************
.ChartTitle.Delete
'***************************************************************
End With
'X軸の設定
'最小値
ActiveChart.Axes(xlCategory).MinimumScale = Xmin(i)
'最大値
ActiveChart.Axes(xlCategory).MaximumScale = Xmax(i)
'主メモリ
ActiveChart.Axes(xlCategory).MajorUnit = Xmajorunit(i)
'Y軸との交点
ActiveChart.Axes(xlCategory).CrossesAt = -100000
'X軸が日付でなければコメントアウト
ActiveChart.Axes(xlCategory).TickLabels. _
NumberFormatLocal = "yyyy/m/d"
'Y軸の設定
ActiveChart.Axes(xlValue).Select
'最小値
ActiveChart.Axes(xlValue).MinimumScale = Ymin(i)
'最大値
ActiveChart.Axes(xlValue).MaximumScale = Ymax(i)
'X軸との交点
ActiveChart.Axes(xlValue).CrossesAt = -100000
'系列を追加(Numofseriesの数だけ繰り返す)
For j = 1 To Numofseries
ActiveChart.SeriesCollection.NewSeries
'系列名設定
ActiveChart.FullSeriesCollection(j).Name = _
Cells(16 + 6 * (j - 1), 1 + i)
'Xの参照先設定
ActiveChart.FullSeriesCollection(j).XValues = _
Range(Cells(17 + 6 * (j - 1), 1 + i).Value, _
Cells(18 + 6 * (j - 1), 1 + i).Value)
'Yの参照先設定
ActiveChart.FullSeriesCollection(j).Values = _
Range(Cells(19 + 6 * (j - 1), 1 + i).Value, _
Cells(20 + 6 * (j - 1), 1 + i).Value)
'系列の書式設定
ActiveChart.FullSeriesCollection(j).Select
With Selection
'線を表示
.Format.Line.Visible = msoTrue
'線の色の設定
.Format.Line.ForeColor.RGB = RGB1(j)
'線のスムージングの設定
.Smooth = True
'線の幅設定
.Format.Line.Weight = 0.75
'マーカーの種類の設定
.MarkerStyle = j
'マーカーサイズの設定
.MarkerSize = 4
'マーカーの塗りつぶし設定 msoTrueで塗りつぶし
.Format.Fill.Visible = msoFalse
'マーカーの色設定
.Format.Fill.ForeColor.RGB = RGB1(j)
End With
Next
'凡例を追加
ActiveChart.SetElement (msoElementLegendRight)
'凡例の書式設定
ActiveChart.Legend.Select
With Selection.Format.Fill
'凡例の塗りつぶし設定
.Visible = msoTrue
'塗りつぶし色の設定
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
End With
With Selection.Format.Line
'凡例の枠設定
.Visible = msoTrue
'枠の色設定
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
'枠の色を薄くする
.ForeColor.Brightness = -0.15
End With
With ActiveChart.Legend
'凡例の左の位置設定
.Left = 405
'凡例の上の位置設定
.Top = 27
End With
With ActiveChart.PlotArea
'プロットエリアの左の位置設定
.Left = 40
'プロットエリアの幅設定
.Width = 380
End With
Next
GoTo endline
errhandler:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAuto
MsgBox "グラフ数(B1)、系列数(B2)の設定は正しいですか?" _
& vbCrLf & i & "番目のグラフの" & j & _
"番目の系列の設定にエラーがある可能性があります。" _
, , "確認してください"
endline:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAuto
End Sub
このマクロを実行すると、指定した情報に従ってズラズラっとグラフが自動作成されます。
系列が10個まで、作成するグラフが20個までの場合であれば、このマクロそのままで使用できますが、これより系列の数やグラフの数が多い場合は、Dimと書いている部分の()内の数字を大きくして対応してください。
これにあわせて、Excelシート側も設定値を入れる部分を調整することもお忘れなく。
RGB1(1) = RGB(0, 0, 0)
RGB1(2) = RGB(255, 0, 0)
RGB1(3) = RGB(255, 192, 0)
RGB1(4) = RGB(146, 208, 80)
RGB1(5) = RGB(0, 176, 80)
RGB1(6) = RGB(0, 176, 240)
RGB1(7) = RGB(0, 112, 192)
RGB1(8) = RGB(0, 32, 96)
RGB1(9) = RGB(112, 48, 160)
RGB1(10) = RGB(255, 0, 255)
と書いている部分は、系列の色を設定している部分です。色をRGB値で指定していますが、ここはお好みに合わせて調整できますので、他の色でグラフを作りたい場合は、plus color等のサイトでRGB値を調べて調整してみてください。
また、
NumberFormatLocal = "yyyy/m/d"
という部分は、今回作成したグラフが日付を表すシリアル値を使うものでしたので、X軸の目盛りを日付形式の表示に変更しているところです。あなたが取り扱うデータが日付でなければ、この文は必要ありませんので、この行の先頭に’を入れてコメントアウトしてください。
関連記事(日付の取り扱い方)
このマクロを使うと、グラフが沢山できてきますが、設定が気に入らなくても大丈夫!関連記事で紹介したマクロを使えば、グラフをすべて削除できますので、お好みのグラフになるように、何度でも設定のやり直しもできますよ。
さらに、下の記事で紹介した方法を使えば、作成したグラフをワードに貼り付けるのも一瞬!こちらもあわせて使ってみてくださいね。
関連記事(グラフのワードへの貼付け)
まとめ
今回は、散布図を大量に作成するというをExcelのマクロをつかって自動化し、作業を効率化する方法を紹介しました。
・空のグラフを作って、軸のタイトル、凡例のなどを設定
・系列を追加し、名前、X、Yのデータの範囲を指定
・系列の表示に関する設定(マーカーや線の色等)を変更
・系列を追加する作業を表示するデータの数だけ繰り返し、グラフを完成させ、
・作成するグラフの数だけこれを繰り返す
という地味で辛い作業を、
1.作成するグラフの数、系列の数、グラフの大きさを読み込む
2.作成するグラフのX軸とY軸の設定値を読み込む
3.新規グラフを作成し、X軸ラベルを追加し表示する文字を設定
4.Y軸ラベルを追加し表示する文字を設定
5.X軸の最小値、最大値、主メモリ、Y軸との交点を設定
6.X軸の目盛りの表示を日付形式に変更
7.Y軸の最小値、最大値、主メモリ、X軸との交点を設定
8.系列を追加し、系列名、Xの参照先、Yの参照先を設定し、線、マーカーの書式を設定
9.系列の追加を指定の数だけ繰り返して、凡例を追加し、この書式を設定
10.凡例の位置とプロットエリアの位置を調整
11.3~10を作成するグラフの数だけ繰り返し
という手順で処理を行うマクロにするところがポイントです。
下で紹介するExcelファイルも是非お使いくださいね。プログラムを書く時間も短縮できると思います。
ある機能をExcelで実現するとき、その方法は一つだけとは限りません。
ExcelVBAで使用できる機能をフルに使ってシンプルに作ることもできます。ただこれにはそれなりの勉強が必要。すぐには使えず、今すぐ問題を解決したいとい状況にはあいません。ですので、このブログで紹介するマクロは、できるだけ簡単なもの、VBAにそう詳しくなくても読めそうなもの、手を加えやすいものになるように心がけています。
マクロって難しそう、と敬遠していた方にマクロって意外とお手軽ね!と感じていただき、これを応用すればあの作業も自動化できるかも!と次のステップやアクションにつなげていただければと思います。
Excelのスキルを一気に向上させて、ライバルに差をつけたい、仕事を一気にさばいてスピードアップしたい、スキルを身に着けて転職や就職に役立てたいと思ったあなた!ぜひ下のボタンをクリックしてください!
募集締め切りが迫っているので、期間限定で「短期間で実力の向上が見込めるお手頃な方法」を紹介していますよ。
ホントは管理人Goも早く知りたかった!オンラインブートキャンプで、見やすいデータをより早く仕上げる Excel術をマスターしよう!
『大量の散布図を自動作成』するExcelサンプルをプレゼント
今回紹介した
- 作成するグラフの数、系列の数、グラフの大きさを読み込む
- 作成するグラフのX軸とY軸の設定値を読み込む
- 新規グラフを作成し、X軸ラベルを追加し表示する文字を設定
- Y軸ラベルを追加し表示する文字を設定
- X軸の最小値、最大値、主メモリ、Y軸との交点を設定
- X軸の目盛りの表示を日付形式に変更
- Y軸の最小値、最大値、主メモリ、X軸との交点を設定
- 系列を追加し、系列名、Xの参照先、Yの参照先を設定し、線、マーカーの書式を設定
- 系列の追加を指定の数だけ繰り返して、凡例を追加し、この書式を設定
- 凡例の位置とプロットエリアの位置を調整
- 3~10を作成するグラフの数だけ繰り返し
という処理を行うマクロを実装したExcelファイル、プログラムを記載したbasファイルが下からダウンロードできます。
auto_graph.xlsm
auto_graph.bas
お好きな形式のファイルをダウンロードして、実際に動かしてみたり、あなたの課題にあわせて調整して作業時間短縮、効率化に役立ててみてください!
basファイルって何?どう使うの?という方やマクロはどのようにして実行するの?と疑問に思った方は、関連記事もチェックしてみてくださいね。
最新情報をお届けします
Twitter でExcel GO! GO!をフォローしよう!
Follow @go_excelコメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。