理系が使ってもそれほど怒られないグラフをExcelで その2

この記事は「[理系が使ってもそれほど怒られないグラフをExcelで](http://qiita.com/mori_toma/items/7b053357539058e94975)」の続きです。
文中のマクロはすべて「散布図が選択状態であること」を前提に書いています。
詳しい使いかたは前回の記事をご覧ください。

前回はプロットエリアの大きさを整えて背景を白く塗り、軸の装飾を外すというマクロでした。

今回はそれに加えて
1 タイトル、軸の名前、凡例を追加
2 すべてのパーツのフォントを整える
3 マーカーを綺麗にする
の3機能を入れたいと思います。

##1 タイトル、軸の名前、凡例を追加

この3つはどれも似たような書き方になります。

1行目でタイトルの入れ物を設定し、その下でタイトルのテキストと位置を指定します。

```
.HasTitle = True
.ChartTitle.Text = "Title"
.ChartTitle.Top = 450
.ChartTitle.Left = 220
```

設置してみたものの、やっぱりいらなくなった、そんなときは最後にこの1行を追加。

```
.HasTitle = False
```

この命令は「見えなくする」ではなく「消去する」のようです。
そのため、それより下の行でタイトルのプロパティを設定しようとするとエラーになります。

軸の名前も同じ形式で設定します。

```
' ----- 横軸の名前 -----'
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = "yokojiku [mm]"
    .Axes(xlCategory).AxisTitle.Top = 410
    .Axes(xlCategory).AxisTitle.Left = 450

' ----- 縦軸の名前 -----'
    .Axes(xlValue).HasTitle = True
    .Axes(xlValue).AxisTitle.Text = "tatejiku [mm^2]"
    .Axes(xlValue).AxisTitle.Top = 180
    .Axes(xlValue).AxisTitle.Left = 15
```

凡例もほぼ同じです。系列名は系列の数だけ必要です。

```
' ----- 凡例 ----- '
    .HasLegend = True
    .SeriesCollection(1).Name = "Sub 1" ' 系列が複数あるときはコピペして(2), (3), (4)...を作ってください
    .Legend.Top = 50
    .Legend.Left = 520
```

##2 すべてのパーツのフォントを整える
とは言っても、一個一個指定するのが無難な気がします。

タイトル

```
.ChartTitle.Font.Name = "century" ' タイトルのフォント
.ChartTitle.Font.Size = 15 ' タイトルのフォントサイズ
```

横軸、縦軸の名前

```
.Axes(xlCategory).AxisTitle.Font.Name = "century" ' 横軸名のフォント
.Axes(xlCategory).AxisTitle.Font.Size = 15 ' 横軸名のフォントサイズ
.Axes(xlValue).AxisTitle.Font.Name = "century" ' 縦軸名のフォント
.Axes(xlValue).AxisTitle.Font.Size = 15 ' 縦軸名のフォントサイズ
```

横軸、縦軸のスケール

```
.Axes(xlCategory).TickLabels.Font.Name = "century" ' 横軸スケールのフォント
.Axes(xlCategory).TickLabels.Font.Size = 12 ' 横軸スケールのフォントサイズ
.Axes(xlValue).TickLabels.Font.Name = "century" ' 縦軸スケールのフォント
.Axes(xlValue).TickLabels.Font.Size = 12 ' 縦軸スケールのフォントサイズ|
```

凡例

```
.Legend.Font.Name = "century" ' 凡例のフォント
.Legend.Font.Size = 12 ' 凡例のフォントサイズ
```

ところでよく、`.ChartTitle.Format.TextFrame2.TextRange.Font.Name`という書き方も見かけます。私の環境では、そちらも動きます。

##3 マーカーを綺麗にする
マーカーのプロパティについては、バージョンが異なることによるバグが多そうです。そんな予感がしています。
なにしろ私の持っているExcelがすでにバグっています。

マーカーは系列ごとに指定します。(1)とついているものは系列1の設定を意味します。系列が複数あるときは、同様に(2)(3)(4)…が必要です。

サイズと形を指定

```
.SeriesCollection(1).MarkerSize = 2 ' サイズ 2~72
.SeriesCollection(1).MarkerStyle = xlMarkerStyle***
```

末尾の***にはCircle, Dash, Diamond, Dot, Plus, Square, Star, Triangle, X…などが入ります。ただ、Dotはサイズを変えられないかもしれないです。

色の指定

```
.SeriesCollection(1).MarkerForegroundColor = RGB(255, 0, 0) ' マーカーの色
.SeriesCollection(1).MarkerBackgroundColor = RGB(255, 0, 0) ' マーカーの内側の色
```

ふたつとも同じ色にするとシンプルになるかもしれないです。

影を消すには

```
.SeriesCollection(1).Format.Shadow.Visible = False
```

で良いはずなのですが、うちのExcelはバグってるので

```
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleInnerShadow
```

で「見えなく」したほうが上手くいきます。うちのExcelはExcel for Mac 2011です。そんなの使ってるほうが悪いという説もありますが泣泣泣

##4 できた
前回紹介した設定と今回紹介した3機能をすべてまとめたマクロがこちらです。
数値を書き換えたり、いらない行を「'」でコメントアウトしたりして、お好みのグラフを作っていただけます。

```
Sub SimpleGraph2()
' 散布図を作成し、選択した状態で実行してください。
' 動作確認環境：Excel fo Mac 2011 散布図＞散布図（オプション無し）

With ActiveChart

    ' 外枠と内枠の位置です
    .ChartArea.Height = 480
    .ChartArea.Width = 600
    .PlotArea.Height = 380
    .PlotArea.Width = 480
    .PlotArea.Top = 50
    .PlotArea.Left = 50
    
    ' 背景色です
    .ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 255)
    .PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 255)
    
    ' 軸をシンプルにします
    .Axes(xlCategory).HasMajorGridlines = False
    .Axes(xlValue).HasMajorGridlines = False
    .Axes(xlCategory).MajorTickMark = xlTickMarkNone
    .Axes(xlValue).MajorTickMark = xlTickMarkNone
        
' ----- タイトル ----- '
    .HasTitle = True
    .ChartTitle.Text = "Title"
    .ChartTitle.Top = 450
    .ChartTitle.Left = 270

' ----- 横軸の名前 -----'
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = "yokojiku [mm]"
    .Axes(xlCategory).AxisTitle.Top = 430
    .Axes(xlCategory).AxisTitle.Left = 430

' ----- 縦軸の名前 -----'
    .Axes(xlValue).HasTitle = True
    .Axes(xlValue).AxisTitle.Text = "tatejiku [mm^2]"
    .Axes(xlValue).AxisTitle.Top = 60
    .Axes(xlValue).AxisTitle.Left = 20

' ----- 凡例 ----- '
    .HasLegend = True
    .SeriesCollection(1).Name = "Sub 1" ' 系列が複数あるときはコピペして(2), (3), (4)...を作ってください
    .Legend.Top = 50
    .Legend.Left = 520

' ----- フォントとフォントサイズ ----- '
    .ChartTitle.Font.Name = "century" ' タイトルのフォント
    .ChartTitle.Font.Size = 15 ' タイトルのフォントサイズ
    .Axes(xlCategory).AxisTitle.Font.Name = "century" ' 横軸名のフォント
    .Axes(xlCategory).AxisTitle.Font.Size = 15 ' 横軸名のフォントサイズ
    .Axes(xlValue).AxisTitle.Font.Name = "century" ' 縦軸名のフォント
    .Axes(xlValue).AxisTitle.Font.Size = 15 ' 縦軸名のフォントサイズ
    .Axes(xlCategory).TickLabels.Font.Name = "century" ' 横軸スケールのフォント
    .Axes(xlCategory).TickLabels.Font.Size = 12 ' 横軸スケールのフォントサイズ
    .Axes(xlValue).TickLabels.Font.Name = "century" ' 縦軸スケールのフォント
    .Axes(xlValue).TickLabels.Font.Size = 12 ' 縦軸スケールのフォントサイズ
    .Legend.Font.Name = "century" ' 凡例のフォント
    .Legend.Font.Size = 12 ' 凡例のフォントサイズ
    
' ----- マーカー ----- '
    .SeriesCollection(1).MarkerSize = 2 ' サイズ 2~72
    .SeriesCollection(1).MarkerStyle = xlMarkerStyleCircle ' 形状
    ' -------------------------------------------------------------------- '
    ' ----- .SeriesCollection(1).MarkerStyle = xlMarkerStyle*** ----------------- '
    ' ----- 末尾の***はCircle, Dash, Diamond, Dot, Plus, Square, Star, Triangle, X --- '
    ' ----- ただし、Dotはサイズを大きくできないかもしれません。--------------------- '
    ' -------------------------------------------------------------------- '
    .SeriesCollection(1).MarkerForegroundColor = RGB(255, 0, 0) ' マーカーの色
    .SeriesCollection(1).MarkerBackgroundColor = RGB(255, 0, 0) ' マーカーの内側の色
    .SeriesCollection(1).Format.Shadow.Style = msoShadowStyleInnerShadow '影を隠す
    .SeriesCollection(1).Format.Shadow.Visible = False '影を消す

'    .HasTitle = False ' タイトルなしにできます。
'    .Axes(xlCategory).HasTitle = False ' 横軸名なしにできます。
'    .Axes(xlValue).HasTitle = False ' 縦軸名なしにできます。
'    .HasLegend = False ' 凡例無しにできます。

End With

End Sub
```

実行前
<img width="372" alt="スクリーンショット" src="https://qiita-image-store.s3.amazonaws.com/0/26164/173e3288-3b84-1299-3f59-f2872dba0efa.png">

実行後
<img width="624" alt="スクリーンショット" src="https://qiita-image-store.s3.amazonaws.com/0/26164/dfced5df-4f1c-42bc-34ed-fdfb793a1f8b.png">


##5 今後の展望
・軸のスケールを変える
・特殊な軸を設定
・近似曲線を追加
・エラーバーを追加
・プロットの値を表示
・関数曲線を追加
などです。

めげそう。