ExcelVBA グラフの凡例に示されるマーカーの影が消えない問題

*(Excel for Mac 2011で動作確認しています。)*

散布図の書式をVBAで編集してると、たまにこうなります。
 
<img width="600" alt="スクリーンショット 2017-02-10 12.32.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/2597c28c-ba58-b987-5a59-7942b0b937e0.png">

<img width="320" alt="スクリーンショット 2017-02-10 12.40.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/1bba0346-e7ea-af8d-7bed-2eb3b4b3d15b.png">
 
 
結論から言うと、グラフを選択した状態でこちらのマクロを実行していただくと消えることが多いです。

``` 
Sub CannotEraseShadow()
    With ActiveChart  'グラフを選択した状態で実行してください

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

    End With

End Sub
```

#原因と対策
散布図に対し、VBAで書式変更をしていくような場合です。
 
散布図のデフォルト設定が「マーカーに影をつける」になっていて、まずこの影を消そうとして四苦八苦します。
私の使っている環境では、影を見えなくするためのプロパティが、**存在しているのに動作していません。**
この現象で悩む人は多いようで、解決法としては、影の種類を変更して「見えなく」してしまいます。

影の種類を変える方法は2種類あります。
ひとつめは、

``` 
    .SeriesCollection(1).Format.Shadow.Type = msoShadow1
```

影のTypeは40種類以上用意されていますが、影を見えなくしたいならmsoShadow1が良いだろうとの噂です。

もうひとつは、

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

こちらは影のStyleで、内付きか外付きを選べます。内付きにするとやはり影が見えなくなります。

上記の方法は、どちらもプロットエリア上の影が見えなくなります。
しかし、Typeのほうを実行すると凡例に示されるマーカーの影がバグってしまうようなのです。
 
というわけで、**Typeは触らないのが得策**です。
#追求と実験
 
どうにも頭痛がするのは、このStyleとTypeの扱う書式が、棲み分けがなされておらず、競合しているという点です。
 
そのため、マクロの中にStyleを指定する行とTypeを指定する行を混在させると、行の順序によって結果が変わります。それでいて、Styleのみ、Typeのみを指定した場合と、両方を指定した場合では、やはり結果が異なるのです。
 
これは何を意味するかというと、既に何度も編集が繰り返されているグラフに影の形を変えるマクロを適用した場合、どんな見た目になるかは、**それまでの編集履歴次第**ということです。
 
Excelのグラフの最終的な見栄えを統一するには、編集履歴をも統一する必要があるのです。
 
さて影のStyleとTypeの競合を確認してみることにしましょう。
 
以下の動作確認においては書式変更の履歴を統一するため、毎度新しくデフォルトのグラフを用意して、それぞれに対して一度だけマクロを適用しています。

<img width="370" alt="original.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/b80c88fd-4ac9-0a46-f80c-b75fbd54ce04.png">


こちらが元のグラフです。
##単体での動作
###Typeのみ指定

``` 
    .SeriesCollection(1).Format.Shadow.Type = msoShadow1
```

<img width="369" alt="type.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/dfad8ddc-ff2b-8a48-fd0c-4b7b79f176c6.png">

プロットエリアからは影が消えますが、凡例がバグります。
###Style（内付き）のみ指定

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

<img width="366" alt="innerStyle.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/7bf61856-2ad6-88b8-ffb0-cf0530f61f14.png">


プロットエリアからも凡例からも影が一掃される、大変お得な設定です。
###Style（外付き）のみ指定

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

<img width="367" alt="outerStyle.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/b96be751-599a-f578-3cf7-cc82473988b5.png">

 
しっかりと目立つ影が現れます。

##複数を組み合わせたときの動作

###Type→Style（内付き）

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

<img width="371" alt="type_innerStyle.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/1f20c959-39d3-45d3-415c-3560e1b2e35c.png">

Style内付きのみ指定したときと同じような結果になります。
よって、すでに凡例がバグってしまって、とにかく消したい、といった場合は、とりあえずStyle（内付き）の指定を行なうと良くなるかもしれません。
 
###Type→Style（外付き）

```
    .SeriesCollection(1).Format.Shadow.Type = msoShadow1
    .SeriesCollection(1).Format.Shadow.Style = msoShadowStyleOuterShadow 
```

<img width="366" alt="type_outerStyle.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/90974b95-622d-a9b6-f5f0-b96b2a9beaaf.png">

Style（外付き）の効果が微妙に現れていますが、単体で指定したときとは違った見た目になります。StyleにはTypeの効果を完全に塗り替える能力は無いことがわかります。

###Style（内付き）→Type

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

<img width="370" alt="innerStyle_type.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/a429e44b-5f56-e256-dd68-be22496b0f25.png">

最悪です。順序が違うだけでこの始末です。

###Style（外付き）→Type

```
    .SeriesCollection(1).Format.Shadow.Style = msoShadowStyleOuterShadow 
    .SeriesCollection(1).Format.Shadow.Type = msoShadow1
```

<img width="366" alt="outerStyle_type.png" src="https://qiita-image-store.s3.amazonaws.com/0/26164/ebf357e3-96c9-3a03-e38d-df746fe15f63.png">

こちらも最悪です。しかも外付きにすらならないのです。

どうやら、TypeはStyleの後継のプロパティのようで、種類も豊富ですし、基本的にはStyleの効果を塗り替える能力を持つようです。ただ凡例がバグっちゃうのが玉に瑕です。
#まとめ
Excelのグラフの見栄えは編集履歴に依存して変わる可能性があります。
すでに影のTypeを変更してしまったグラフと、Typeを一度も触っていないグラフでは、影のStyleを指定したときの出来栄えが違うことがあります。
 
影の種類の指定としてはTypeのほうが充実していますが、凡例がバグるという欠点があります。
 
シンプルなグラフが欲しい人は影のStyleを「内付き」にするのが良さそうです。
 
グラフの書式の編集履歴は、後からでは確認しようがないことが多いです。
行き詰まった場合は、潔くグラフを消去し、最初から作り直すのが良いかと思います。
 
あとそうですね、よく考えてみたら、**グラフを書くソフトはExcel以外にもたくさんあります。**