Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
グラフ近似曲線の式やR2のフォント色をグラフ色と合わせたい
投稿日時: 24/01/10 15:04:32
投稿者: ひろと

件名の内容を実現するために、色を取得しようとしましたが、以下のコードでは取得することが出来ません

    iro = ActiveChart.FullSeriesCollection(xx).Format.Line.ForeColor.RGB

グラフ各系列の色は、以下のコードで設定できますが、どこがおかしいのでしょうか?
    ActiveChart.FullSeriesCollection(xx).Select
    With Selection.Format.Line
     .ForeColor.RGB = RGB(128, 100, 162)
    End With

回答
投稿日時: 24/01/10 16:34:18
投稿者: sk

引用:
グラフ近似曲線の式やR2のフォント色をグラフ色と合わせたい

(標準モジュール)
---------------------------------------------------------------
Sub SettingTrendlineFormat()
 
    Dim xlsWorksheet As Excel.Worksheet
     
    'アクティブシートの参照
    Set xlsWorksheet = ActiveSheet
     
    'ワークシート上にグラフオブジェクトがなければ終了
    If xlsWorksheet.ChartObjects.Count = 0 Then
        Set xlsWorksheet = Nothing
        Exit Sub
    End If
     
    Dim xlsChart As Excel.Chart
     
    'ワークシート上の 1 つめのグラフオブジェクトのグラフを参照
    Set xlsChart = xlsWorksheet.ChartObjects(1).Chart
     
    Dim xlsSeries As Excel.Series
     
    '1つめの系列を参照
    Set xlsSeries = xlsChart.FullSeriesCollection(1)
     
    '参照中の系列に近似曲線が追加されていなければ終了
    If xlsSeries.Trendlines.Count = 0 Then
        Set xlsSeries = Nothing
        Set xlsChart = Nothing
        Set xlsWorksheet = Nothing
        Exit Sub
    End If
     
    Dim xlsTrendline As Excel.Trendline
    Dim lngLineColor As Long
     
    '近似曲線の参照
    Set xlsTrendline = xlsSeries.Trendlines(1)
 
    '以下、近似曲線の設定
    With xlsTrendline
        '線の色を取得
        lngLineColor = .Format.Line.ForeColor.RGB
        'データラベルに数式を表示する
        .DisplayEquation = True
        'データラベルに R-2 乗値を表示する
        .DisplayRSquared = True
        'データラベルのフォントの前景色を設定する
        .DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = lngLineColor
    End With
     
    Set xlsTrendline = Nothing
    Set xlsSeries = Nothing
    Set xlsChart = Nothing
    Set xlsWorksheet = Nothing
 
End Sub
---------------------------------------------------------------
 
以上のような処理を実行できればよい、ということでしょうか。

投稿日時: 24/01/10 17:45:57
投稿者: ひろと

skさん
 
ありがとうございます。
 
元々したかったことは、近似曲線ではなく近似前のグラフの色を取得したく(たまに近似曲線の色と近似前グラフの色が異なるため)、近似前グラフの色が元の投稿のコードでは取得できなかったため質問したのですが、今扱っているグラフでは、近似曲線が近似前グラフと色が変わることがなさそうなので、このコードのように、近似曲線の色を取得する方向にしようと思います。

回答
投稿日時: 24/01/11 09:09:52
投稿者: simple

コード提示をいただき、解決されたようです。
ただ、アプローチ方法を整理しておいたほうがいいですよ。
 
知りたいのは、グラフ近似曲線の式やR2のフォント色 ということですから、
式とRsquare値の入ったデータラベルを選択して、そのフォント色を変更する動作のマクロ記録を
とるところから始めるのが基本じゃないでしょうか。
今どきは、ネット上で検索する(質問掲示板の利用も含む)という方法もあるようですが、
ご自分でマクロ記録をとり、そのコードをヘルプで調べていくという方法もあり、だと思います。
# 老婆心ながら。

投稿日時: 24/01/11 09:37:42
投稿者: ひろと

simpleさん
 
コメントありがとうございます。
 
コードを作っていく方法としては書かれた通りだと思いますし、実際にマクロの記録から始めて、式とRsquare値の入ったデータラベルのフォント色の変更自体は、ここで質問する前時点で出来ていました。今回は、「グラフ色と同じにしたい」ことが出来なかったので質問しました。
 
最初に質問した通りに、グラフ色の設定は

    ActiveChart.FullSeriesCollection(xx).Select
    With Selection.Format.Line
     .ForeColor.RGB = RGB(128, 100, 162)
    End With

で出来ますが、この色を取得しようとしても
    iro = ActiveChart.FullSeriesCollection(xx).Format.Line.ForeColor.RGB

のiroが0になってしまうため質問しました(MicrosoftLearnも確認しましたが解決できませんでした)。
今見返してみると、最初の質問が言葉足らずだったなと思います。
 
グラフの色に関しては他にもマクロの記録で作ったコードをそのまま実行しても、記録時にはマーカーの色を変更したのに、実行時にはラインの色が変わってしまったりとよく分からない挙動をするときが多く、まだまだ勉強が足りないと思っています。

回答
投稿日時: 24/01/11 09:49:32
投稿者: simple

引用:
最初に質問した通りに、グラフ色の設定は
    ActiveChart.FullSeriesCollection(xx).Select
    With Selection.Format.Line
     .ForeColor.RGB = RGB(128, 100, 162)
    End With
で出来ますが、この色を取得しようとしても
    iro = ActiveChart.FullSeriesCollection(xx).Format.Line.ForeColor.RGB
のiroが0になってしまうため質問しました

    Debug.Print ActiveChart.FullSeriesCollection(1).Format.Line.ForeColor.RGB
で 10642560 が出力されました。不思議ですね。
余り関係なかったですか。
# それではこれで。

回答
投稿日時: 24/01/11 16:40:32
投稿者: sk

引用:
元々したかったことは、近似曲線ではなく近似前のグラフの色を
取得したく(たまに近似曲線の色と近似前グラフの色が異なるため)、
近似前グラフの色が元の投稿のコードでは取得できなかった

引用:
iroが0になってしまう

(標準モジュール)
------------------------------------------------------------
Private Sub Test1()
     
    Dim xx As Long
    Dim iro As Long
     
    xx = 1
     
    With ActiveChart.FullSeriesCollection(xx).Format.Line.ForeColor
        .RGB = RGB(128, 100, 162)
        iro = .RGB
    End With
     
    Debug.Print iro
 
End Sub
------------------------------------------------------------
 
例えば以上のようなコードを実行してみても、
イミディエイトウィンドウに 10642560 ではなく
0 が出力されてしまう、ということでしょうか。
 
引用:
グラフの色に関しては他にもマクロの記録で作ったコードを
そのまま実行しても、記録時にはマーカーの色を変更したのに、
実行時にはラインの色が変わってしまったりとよく分からない
挙動をするときが多く

とりあえず Selection や ActiveChart を参照しない形に
書き換えられてみてはいかがでしょうか。

回答
投稿日時: 24/01/12 08:49:57
投稿者: simple

現状の不具合調査が質問の重点だとすると、
部分的なものでなく、事象が再現する最低限のコードを提示されたらいかがですか?
変数の宣言なども省略せず、Sub XXX() から End Sub までを示して、
回答者が検証できるものを提示されたらいかがですか?
そのあたりがあいまいですと、省略されているところに原因があることもありますから。

投稿日時: 24/01/25 17:12:25
投稿者: ひろと

皆様
 
色々と調べたところ、マクロの記録でのグラフ系列マーカー周りにはエクセル(VBA)のバグ(仕様)があることわかりました。バグ内容はマーカーの囲み線の太さ等に関して、FullSeriesCollection.Format.Lineと共有してしまっている等です。(FullSeriesCollection.Format.Marker.〜〜といったものはない)
 
一方で、マーカーでも塗りつぶし色と枠線といった一部にはFullSeriesCollection.MarkerBackgroundColor(塗りつぶし)、FullSeriesCollection.MarkerForegroundColor(枠線)があることも分かりましたので、今回は色をマーカー塗りつぶし色から取得することにしました。
 
ありがとうございました。