事前定義された(つまり、私が定義した)標準に従ってグラフをフォーマットするExcel 2010 VBAサブルーチンを記述しようとしています。設定できるようにしたい特定の属性は、データ系列をダブルクリックしたときに開く[データ系列の書式設定]ウィンドウから利用できる属性にすぎません。
設定する必要のあるさまざまなプロパティの名前を見つけるために、データシリーズのスタイルに加えた変更をマクロとして記録しました。ただし、[データシリーズの書式設定]ウィンドウを使用して、線の色とマーカーの線の色を異なる色に設定できますが、記録されたマクロ(下に注釈)は、線の色とマーカーの線の色の同じ名前の(区別できない)オブジェクトを参照します。
また、実際にマクロを実行すると、2つの問題があります。まず、記録されたマクロがマーカー塗りつぶしプロパティ.ForeColor.Brightness
を参照しているという事実にもかかわらず、その行はマクロが実行されるとエラーを生成します。エラーは「オブジェクトのColorFormatのメソッドの明るさが失敗しました」を示しています。次に、記録されたコードは実際にシリーズのマーカーラインの色とメインラインを同時に設定します。そのため、記録されたコードでは、どちらも最初にマーカーに期待したとおりに設定されます線の色、それからどちらもメインの線の色に必要なものに設定しました。
マーカーの塗りつぶし、マーカーの線の色、線の色を設定するにはどうすればよいですか。
Sub Macro1()
'
' Macro6 Macro
' On Sheet 1 there is a single embedded chrt
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.SeriesCollection(1).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
' The following (recorded line produces an error)
.ForeColor.Brightness = 0.5
.Transparency = 0
.Solid
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent5
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.400000006
.Transparency = 0
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent6
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = -0.5
.Transparency = 0
End With
End Sub
これらの書式設定オプションは、Excel 2010および2013で多少ぎこちなく実装されているようです。
Series.Format
_オブジェクトとその子(Fill
、Glow
、Shadow
など)を使用して、マクロコードが記録したときに設定されます。 [1])。Series.MarkerBackgroundColor
_または_Series.MarkerBackgroundColorIndex
_で設定されます。同様に、シリーズのallマーカーのマーカー線の色は、_Series.MarkerForegroundColor
_または_Series.MarkerForegroundColorIndex
_で設定されます。 [2]Series.Points(n).Format.Fill
オブジェクトとSeries.Points(n).Format.Line
オブジェクトを使用して、マーカーの塗りつぶしと線の色を個別に設定する ただし、少なくともExcel 2013では、Series.Points(n).Format.Line.ForeColor
alsoは、関連するデータポイントの直前の線分の色を変更します。#2のプロパティは、以前のExcel DOMからのホールドオーバーのように見えますが、_.MarkerForegroundColor
_および_.MarkerBackGroundColor
_がRGB値を受け入れる点で機能が拡張されています。 3番目のものは、Excel 2010以降で見られる新しいレベルの構成可能性と一致していますが、バグがあるようです。バグの厄介な点の1つは、マーカーの線の色がシリーズの線の色と問題があるように絡み合っているように見えることです-私の知る限り、マーカーの線の色にも影響を与えずに線の色を変更することは不可能ですその逆。特に、VBAを使用してマーカーラインの色にポイントごとのバリエーションを適用しながら、均一なシリーズラインの色を実現することは不可能であるように見えます。 (ここでも、Excel 2013でテストしています。2010は異なる動作をする場合があります。)
いずれにしても、ポイントごとのカラー調整が不要な状況では、次のようなヘルパー関数が、マーカーの塗りつぶしやラインの色に影響を与えずにラインの色を変更するのに役立ちます(ここでは、newLineColorが指定されています) Long RGB値として[3]):
_Sub ChangeLineColorOnly(srs as Series, newLineColor as Long)
Dim oldMkrFill as Long, oldMkrLine as Long
' Store old marker colors
oldMkrFill = srs.MarkerBackgroundColor
oldMkrLine = srs.MarkerForegroundColor
' Set the series ForeColor
srs.Format.Fill.ForeColor.RGB = newLineColor
' Restore the old marker colors
srs.MarkerBackgroundColor = oldMkrFill
srs.MarkerForegroundColor = oldMkrLine
End Sub
_
上記のヘルパー関数の代替バージョンは、SchemeColor [4]として指定された色に対応したり、マーカー線の色などのみを保存したりするために簡単に記述できます。
_.ForeColor.Brightness
_グリッチについては、Excel 2010リリースの開発における「マクロの記録」機能の不注意な再コーディングが原因であったと考えられます。おそらく、_.Brightness
_が変更される有効な属性である特定のタイプのチャートの記録されたVBAコードにのみ挿入されているはずです。
[1] http://msdn.Microsoft.com/en-us/library/office/ff839279(v = office.14).aspx
[2] http://msdn.Microsoft.com/en-us/library/office/ff840677(v = office.14).aspx
[3] http://msdn.Microsoft.com/en-us/library/zc1dyw8b%28v=vs.90%29.aspx
[4] http://msdn.Microsoft.com/en-us/library/office/ff836764(v = office.14).aspx
これは私にとってはうまくいきます。
ActiveChart.FullSeriesCollection(1).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
End With