エクセルで簡単に論文用のグラフ作成（チャートエリアとプロットエリアの悩みからおさらば）

エクセルVBAを活用して誰でも簡単に論文用のグラフ作成を自動作成できるようになる記事です。論文用のグラフはパワーポイントで作成する派なので、パワーポイント用にエクセルのグラフを加工します。
エクセルVBAの使い方は検索してください。
また、[前回の記事](https://qiita.com/takashi-programming/items/00c17295cfe05d216414#%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%AB)はより詳細にグラフの設定ができるので参考にしてみてください。

#VBAコード
時間がない人やとりあえず動けばいいという人は，以下のコードを貼り付けてグラフを選択した状態で実行すればきれいなグラフに自動変更されます．

```rb:research_paper_graph.bas
Option Explicit

Sub SimpleGraph_szkh_plotonly()
' グラフを作成し、選択した状態で実行してください。


With ActiveChart
' ----- タイトル ----- '
    .HasTitle = False
' ----- 凡例 ----- '
    .HasLegend = False
' ----- 横軸の名前 -----'
    .Axes(xlCategory).HasTitle = False
' ----- 縦軸の名前 -----'
    .Axes(xlValue).HasTitle = False

    .SetElement (msoElementPrimaryCategoryAxisNone)
    .SetElement (msoElementPrimaryValueAxisNone)
    ' 外枠と内枠の位置です
'    ' 1pt = 0.35mm 100pt = 3.5cm
'    ' 1 mm = 2.83pt 1cm =28.3pt
    .ChartArea.Height = 203
    .ChartArea.Width = 298
    '過剰に大きくし、開始点も外にすることで外枠をなくしています。
    .PlotArea.Height = 500
    .PlotArea.Width = 500
    .PlotArea.Top = -10
    .PlotArea.Left = -10

    ' 背景色です
        '透明にするならFalse
    .ChartArea.Format.Fill.Visible = False
'    .ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 255)
'    .PlotArea.Format.Fill.Visible = True
    .PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 255)

    ' 枠線
    .PlotArea.Format.Line.Style = msoLineSingle
    .PlotArea.Format.Line.Visible = False ' Falseで線なしになります
    .ChartArea.Format.Line.Visible = False ' Falseで線なしになります
    .PlotArea.Format.Line.Weight = 2
    .PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)

    ' 目盛線（グリッド）
    .Axes(xlCategory).HasMajorGridlines = False
    .Axes(xlValue).HasMajorGridlines = False

    ' 目盛り xlTickMark*** : 末尾はInside, Outside, Cross, None
    .Axes(xlCategory).MajorTickMark = xlTickMarkNone ' 横軸
    .Axes(xlValue).MajorTickMark = xlTickMarkNone ' 縦軸

    ' 横軸 線の太さと色
'    .Axes(xlCategory).Format.Line.Weight = 0
'    .Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(255, 255, 255)

    ' 縦軸 線の太さと色
'    .Axes(xlValue).Format.Line.Weight = 0
'    .Axes(xlValue).Format.Line.ForeColor.RGB = RGB(255, 255, 255)

' ----- 横軸のスケール -----'
    ' 種類 xlTickLabelPosition*** : 末尾はNextToAxis, High, Low, None
'   .Axes(xlCategory).TickLabelPosition = xlTickLabelPositionNone

'    .Axes(xlCategory).TickLabels.Offset = 100 ' 軸からの距離 0~1000 [%]
'    .Axes(xlCategory).TickLabels.Orientation = 0 ' スケールの向き -90~90 [degree]

'    .Axes(xlCategory).MinimumScale = 300 ' 最小値
'    .Axes(xlCategory).MaximumScale = 700 ' 最大値
'    .Axes(xlCategory).MajorUnit = 100  ' 刻み
'    .Axes(xlCategory).TickLabels.NumberFormat = "0" ' 数値の表示形式  少数点以下の桁数を指定できます。

' ----- 縦軸のスケール -----'
    ' 種類 xlTickLabelPosition*** : 末尾はNextToAxis, High, Low, None
'    .Axes(xlValue).TickLabelPosition = xlTickLabelPositionNone
'
'    .Axes(xlValue).TickLabels.Offset = 100 ' 軸からの距離 0~1000 [%]
'    .Axes(xlValue).TickLabels.Orientation = 0 ' スケールの向き -90~90 [degree]
'
'    .Axes(xlValue).MinimumScale = 0 ' 最小値
'    .Axes(xlValue).MaximumScale = 1.7 ' 最大値
'    .Axes(xlValue).MajorUnit = 0.2  ' 刻み
'    .Axes(xlValue).TickLabels.NumberFormat = "0" ' 数値の表示形式 少数点以下の桁数を指定できます。
'
'' ----- 軸の交点 ----- '
'    .Axes(xlCategory).CrossesAt = 0 ' 横軸の交点
'    .Axes(xlValue).CrossesAt = 0 ' 縦軸の交点
'
'' ----- 軸の反転 ----- '
'    .Axes(xlCategory).ReversePlotOrder = False ' 横軸
'    .Axes(xlValue).ReversePlotOrder = False ' 縦軸

' ----- 対数軸 ----- '
' 対数にするときは以下4行を使ってください
'    .Axes(xlCategory).ScaleType = xlScaleLogarithmic ' 横軸
'    .Axes(xlValue).ScaleType = xlScaleLogarithmic ' 縦軸
'    .Axes(xlCategory).LogBase = 10 ' 対数の底 横軸
'    .Axes(xlValue).LogBase = 10 ' 対数の底 縦軸
' 線形に戻したいときは以下2行を使ってください
'    .Axes(xlCategory).ScaleType = xlScaleLinear ' 横軸
'    .Axes(xlValue).ScaleType = xlScaleLinear ' 縦軸
' ----- ----- ----- ----- '
    .ChartArea.Height = 203
    .ChartArea.Width = 298
    '過剰に大きくし、開始点も外にすることで外枠をなくしています。
    .PlotArea.Height = 500
    .PlotArea.Width = 500
    .PlotArea.Top = -10
    .PlotArea.Left = -10
End With

Dim cho As ChartObject
For Each cho In 
  ActiveSheet.ChartObjects
    cho.Placement = xlFreeFloating
  Next cho

End Sub

```
コード各部の説明については[こちらの記事](https://qiita.com/mori_toma/items/8281596a2537fdc8cd56)を参照してください．


#使用してみました。
枠いっぱいにプロットエリアを拡大することでパワーポイントでのサイズ変更を行いやすくなります。
![2020-05-07_17h14_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631238/b6a6424d-1ecb-862e-32db-6bd891e6b9e7.png)



#終わりに
今回は「エクセルで簡単に論文用のグラフ作成（チャートエリアとプロットエリアの悩みからおさらば）」という記事を書きました．エクセルのみや、pythonでのグラフ作成では痒いところに手が届かない事があり、パワーポイントで作成する方は多いと思います。しかし、エクセルのグラフはチャートエリアとプロットエリアに分かれていて大きさの制御が困難です。そこで、本手法を使うことで簡単にサイズ変更が可能なグラフが作成できると思います．
[私のブログ](https://effichem.blogspot.com/)ではもっと詳細な情報や、化学系のグラフ作成方法など幅広く紹介しているので是非参考にしてみてください。

##参考
https://qiita.com/takashi-programming/items/00c17295cfe05d216414 エクセルで思い通りのグラフを自動作成


https://effichem.blogspot.com/ 私のブログ