web-dev-qa-db-ja.com

Excel 2010 VBAを使用してシリーズの線の色、マーカーの塗りつぶし、マーカーの線の色を設定する方法

事前定義された(つまり、私が定義した)標準に従ってグラフをフォーマットする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
3
user02814

これらの書式設定オプションは、Excel 2010および2013で多少ぎこちなく実装されているようです。

  1. 線の色とプロパティは、_Series.Format_オブジェクトとその子(FillGlowShadowなど)を使用して、マクロコードが記録したときに設定されます。 [1])。
  2. 系列のすべてマーカーのマーカー塗りつぶし色は、_Series.MarkerBackgroundColor_または_Series.MarkerBackgroundColorIndex_で設定されます。同様に、シリーズのallマーカーのマーカー線の色は、_Series.MarkerForegroundColor_または_Series.MarkerForegroundColorIndex_で設定されます。 [2]
  3. または、Series.Points(n).Format.FillオブジェクトとSeries.Points(n).Format.Lineオブジェクトを使用して、マーカーの塗りつぶしと線の色を個別に設定する ただし、少なくともExcel 2013では、Series.Points(n).Format.Line.ForeColoralsoは、関連するデータポイントの直前の線分の色を変更します。

#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

4
hBy2Py

これは私にとってはうまくいきます。

   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
0
user880721