(Excel for Mac 2011で動作確認しています。)
結論から言うと、グラフを選択した状態でこちらのマクロを実行していただくと消えることが多いです。
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の競合を確認してみることにしましょう。
以下の動作確認においては書式変更の履歴を統一するため、毎度新しくデフォルトのグラフを用意して、それぞれに対して一度だけマクロを適用しています。
こちらが元のグラフです。
単体での動作
Typeのみ指定
.SeriesCollection(1).Format.Shadow.Type = msoShadow1
プロットエリアからは影が消えますが、凡例がバグります。
Style(内付き)のみ指定
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleInnerShadow
プロットエリアからも凡例からも影が一掃される、大変お得な設定です。
Style(外付き)のみ指定
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleOuterShadow
しっかりと目立つ影が現れます。
複数を組み合わせたときの動作
Type→Style(内付き)
.SeriesCollection(1).Format.Shadow.Type = msoShadow1
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleInnerShadow
Style内付きのみ指定したときと同じような結果になります。
よって、すでに凡例がバグってしまって、とにかく消したい、といった場合は、とりあえずStyle(内付き)の指定を行なうと良くなるかもしれません。
Type→Style(外付き)
.SeriesCollection(1).Format.Shadow.Type = msoShadow1
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleOuterShadow
Style(外付き)の効果が微妙に現れていますが、単体で指定したときとは違った見た目になります。StyleにはTypeの効果を完全に塗り替える能力は無いことがわかります。
Style(内付き)→Type
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleInnerShadow
.SeriesCollection(1).Format.Shadow.Type = msoShadow1
最悪です。順序が違うだけでこの始末です。
Style(外付き)→Type
.SeriesCollection(1).Format.Shadow.Style = msoShadowStyleOuterShadow
.SeriesCollection(1).Format.Shadow.Type = msoShadow1
こちらも最悪です。しかも外付きにすらならないのです。
どうやら、TypeはStyleの後継のプロパティのようで、種類も豊富ですし、基本的にはStyleの効果を塗り替える能力を持つようです。ただ凡例がバグっちゃうのが玉に瑕です。
まとめ
Excelのグラフの見栄えは編集履歴に依存して変わる可能性があります。
すでに影のTypeを変更してしまったグラフと、Typeを一度も触っていないグラフでは、影のStyleを指定したときの出来栄えが違うことがあります。
影の種類の指定としてはTypeのほうが充実していますが、凡例がバグるという欠点があります。
シンプルなグラフが欲しい人は影のStyleを「内付き」にするのが良さそうです。
グラフの書式の編集履歴は、後からでは確認しようがないことが多いです。
行き詰まった場合は、潔くグラフを消去し、最初から作り直すのが良いかと思います。
あとそうですね、よく考えてみたら、グラフを書くソフトはExcel以外にもたくさんあります。