今回は前回手作業で行ったグラフの見た目の修正をVBAマクロを使って行います。
マクロによる見た目の変更
今回のマクロの適用により、下のようにエクセルデフォルトのグラフを論文で使えるかもしれないグラフに修正できます。グラフのX軸表示範囲については、データごとに違うので、ここでは妥協しています。また別の記事で扱うかもしれません。


マクロコード
結論から言えば以下のようなコードを使えば、上記のような見た目の変更が行えます。とりあえず、これをコピーして使えばいいと思います。修正したいグラフを選択したうえで、マクロを実行します。
Sub Graphappearance()
If ActiveChart is Nothing then
Else
With ActiveChart
'グラフタイトルを消す
.HasTitle = False
'枠線を黒く
.PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
'凡例を消す
.HasLegend = False
'X軸
With .Axes(xlCategory)
'軸の色
.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
'軸ラベルの有無
.HasTitle = True
.AxisTitle.Text = "X-axis"
'軸ラベルの書式
.AxisTitle.Font.Size = 14
.AxisTitle.Font.Name = "Arial"
'目盛り内向き
.MajorTickMark = xlInside
'グリッド線を消す
.MajorGridlines.Format.Line.Visible = msoFalse
'目盛りの書式
.TickLabels.Font.Name = "Arial"
.TickLabels.Font.Size = 10
End With
'Y軸
With .Axes(xlValue)
.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
.HasTitle = True
.AxisTitle.Text = "Y-axis"
.AxisTitle.Font.Size = 14
.AxisTitle.Font.Name = "Arial"
.MajorTickMark = xlInside
.MajorGridlines.Format.Line.Visible = msoFalse
.TickLabels.Font.Name = "Arial"
.TickLabels.Font.Size = 10
End With
End With
End If
End Sub
エラー回避
ここからはマクロの内容について簡単に解説します。
If ActiveChart is Nothing then
Else
の部分が、マクロのエラーを回避するための記述になります。このマクロでは何らかのグラフを選択した状態であることが前提です。グラフを選択忘れることはよくあることなので、その度にエラーが起こっていては煩わしいので、この記述を入れました。ActiveChartがNothing、つまりグラフを選択していない場合の動作を記述していますが、Elseまでの間に何も入れていないので、なんの動作もしません。
逆にElse以降、つまりActiveChartが存在している場合には見た目修正の動作をするように記述しています。この書き方は私もどこかのサイトで見つけたのですが、色々応用が利きそうな便利な表現だと思います。
チャートの修正
With ActiveChart以降でチャートの修正をしています。
.HasTitleがグラフのタイトル
.HasLegendが凡例
で、私はどちらも必要ないと判断しているのでFalseとしています。もし必要であればTrueに変えてください。
.PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
はグラフの枠線を黒くする記述なのですが、これだけだと軸の部分の色が灰色のままになってしまいます。軸の修正の部分でさらに軸を黒くする記述を加えます(めんどくさい、、、)
軸の修正
軸の修正については
With .Axes(****)
End With
内に記述しています。
With .Axes(xlCategory)がX軸、With .Axes(xlValue)がY軸に関する記述です。
修正記述についてはコードを見れば分かると思うので、説明割愛します。フォントの種類や大きさを変えたければ、該当箇所を修正してください。
まとめ
今回はグラフの見た目を手作業ではなくマクロを使って変更しました。Igorなどの専門のグラフソフトと比べても、Excelでグラフの見た目を修正するのは非常に面倒くさいです。マクロを使う優位性も高いと思いますので、ぜひ導入してみてください。



コメント