【本日のミッション】
Excel VBAにて、既存のマーカー付き折れ線グラフ系列のマーカーの塗り・線色をテーマの色【Office】36色に変更せよ。
目次
ミッションの概要
Excel VBAにて、既存のマーカー付き折れ線グラフ系列のマーカーの塗り・線色をテーマの色【Office】36色に変更せよ、というのが今回のミッションです。
実は今回のミッション、テーマの色を完璧に再現することができませんでした。
エクセル VBA セルの塗りつぶしに【配色テーマ Office】の色を設定(Excel VBA)と同じ考えで作ってみたのですが、RGBの値が微妙に違っていました。
RGBが同じ値になっていても、テーマの色として認識されていないようです。
限りなく近い色での再現になりますが、参考までにご覧ください。
リボン「ページレイアウト」タブの「テーマ」ー「配色」を「Office」に設定してしているエクセルファイルが対象です。
任意の色に設定したマーカー付き折れ線グラフ「グラフ 1」の系列のマーカーの塗り、線色を・・・
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
テーマの色【Office】36色に変更します。
プロシージャ
アクティブシートの折れ線グラフ「グラフ 1」の線色を、テーマの色【Office】36色に変更するコードです。
Sub マーカー付き折れ線グラフをテーマの色36色に変更() '【変数】 Dim cht As Chart '処理対象グラフ Dim ser As Long '系列 Dim MyColor_TM As Integer 'テーマの色 Dim MyColor_RGB As Long 'RGBの色 Dim shd As Double '色の明暗 Dim R As Long 'RED(赤) Dim G As Long 'GREEN(緑) Dim B As Long 'BLUE(青) '■変数セット Set cht = ActiveSheet.ChartObjects("グラフ 1").Chart '処理対象グラフ '■テーマの色の初期値 MyColor_TM = 5 '■グラフの系列を順に処理 For ser = 1 To cht.SeriesCollection.Count '■色の明暗 設定 Select Case ser Case Is <= 6 shd = 0 Case Is <= 12 shd = 0.8 Case Is <= 18 shd = 0.6 Case Is <= 24 shd = 0.4 Case Is <= 30 shd = -0.25 Case Else shd = -0.5 End Select '■グラフ塗り・線色を変更 cht.SeriesCollection(ser).Format.Fill.ForeColor.ObjectThemeColor = MyColor_TM 'マーカーの塗り:テーマの色 ' cht.SeriesCollection(ser).Format.Fill.ForeColor.Brightness = shd 'マーカーの塗り:色の明暗 ← これはエラーになるため使用できない cht.SeriesCollection(ser).Format.Line.ForeColor.ObjectThemeColor = MyColor_TM 'マーカーの枠線・折れ線の線色:テーマの色 cht.SeriesCollection(ser).Format.Line.ForeColor.Brightness = shd '折れ線の線色:色の明暗 '折れ線の線色からRGBを取得 MyColor_RGB = cht.SeriesCollection(ser).Format.Line.ForeColor.RGB '変数「MyColor_RGB」をRGBに変換 R = MyColor_RGB Mod 256 ’RED(赤) G = Int(MyColor_RGB / 256) Mod 256 'GREEN(緑) B = Int(MyColor_RGB / 256 / 256) 'BLUE(青) 'マーカーの塗りをRGBで指定 cht.SeriesCollection(ser).Format.Fill.ForeColor.RGB = RGB(R, G, B) 'マーカーの塗り:色の明暗 '■テーマの色 変更 If MyColor_TM = 10 Then MyColor_TM = 5 Else MyColor_TM = MyColor_TM + 1 End If Next End Sub
※お好みで「cht.SeriesCollection(ser).Format」を、Withステートメントで省略してください。
グラフの色は左から5番目~10番目を使用します。
色の明暗は、上から順に使用します。
▼グラフに使用している色の順番です。
SeriesCollection.Format.Fillプロパティ
系列「SeriesCollection」の、塗りつぶしの書式を設定するためのオブジェクトを返します。
SeriesCollection.Format.Fill
SeriesCollection.Format.Lineプロパティ
系列「SeriesCollection」の、線の書式を設定するためのオブジェクトを返します。
SeriesCollection.Format.Line
ForeColor.ObjectThemeColorプロパティ
オブジェクトにテーマの色を設定します。
オブジェクト.ForeColor.ObjectThemeColor = テーマの色
今回は系列 SeriesCollection の1~36番目(変数:ser)のマーカーの塗りつぶし・枠線の色、折れ線の線色に、変数「MyColor_TM」に入れたテーマの色を設定しています。
cht.SeriesCollection(ser).Format.Fill.ForeColor.ObjectThemeColor = MyColor_TM 'マーカーの塗り:テーマの色 cht.SeriesCollection(ser).Format.Line.ForeColor.ObjectThemeColor = MyColor_TM 'マーカーの枠線・折れ線の線色:テーマの色
テーマの色には、カラーパレットの並んでいる順の番号を指定します。
今回は、5番目から10番目の色を使用しています。
なんでテーマの色に番号を使うの?という疑問をお持ちの方は、こちらの記事をご覧ください。
エクセル VBA【配色テーマ Office】セルの塗りつぶしのテーマの色・色の明暗を取得
【色の変更方法】
初めに変数「MyColor_TM」に初期値の「5」を設定します。
MyColor_TM = 5
1系列の処理を終えるたびに、テーマの色「MyColor_TM」に「1」を加え、 「10」の処理を終えたら「5」に戻しています。
If MyColor_TM = 10 Then MyColor_TM = 5 Else MyColor_TM = MyColor_TM + 1 End If
処理される順番は下記のようになります。
明暗を設定
ForeColor.Brightnessプロパティ
対象となるオブジェクトの明暗を設定します。
オブジェクト.ForeColor.Brightness = 色の明暗
今回は系列 SeriesCollection の1~36番目(変数:ser)のマーカーの枠線の色、折れ線の線色にテーマの色変数「MyColor_TM」、色の明暗変数「shd」を設定しています。
マーカーの塗りには「ForeColor.Brightnessプロパティ」が使用できないため、代替え案を下記に載せていますので、ご参照ください。
cht.SeriesCollection(ser).Format.Line.ForeColor.ObjectThemeColor = MyColor_TM 'マーカーの枠線・折れ線の線色:テーマの色 cht.SeriesCollection(ser).Format.Line.ForeColor.Brightness = shd '折れ線の線色:色の明暗
【色の明暗設定の流れ】
系列の順番変数「ser」が6以下の時は、色の明暗「shd」を「0」に設定。
系列の順番変数「ser」が12以下の時は、色の明暗「shd」を「0.8」に設定。
系列の順番変数「ser」が18以下の時は、色の明暗「shd」を「0.6」に設定。
系列の順番変数「ser」が24以下の時は、色の明暗「shd」を「0.4」に設定。
系列の順番変数「ser」が30以下の時は、色の明暗「shd」を「-0.25」に設定。
系列の順番変数「ser」が上記以外の時は、色の明暗「shd」を「-0.5」に設定。
Select Case ser Case Is <= 6 shd = 0 Case Is <= 12 shd = 0.8 Case Is <= 18 shd = 0.6 Case Is <= 24 shd = 0.4 Case Is <= 30 shd = -0.25 Case Else shd = -0.5 End Select
マーカーの塗りに ForeColor.Brightnessプロパティが使えない!? 代替え案
マーカーの塗りに ForeColor.Brightness を使うとエラーになる
マーカーの塗りに、オブジェクトの明暗を設定する「ForeColor.Brightnessプロパティ」を使用するとエラーが出てしまいました。
cht.SeriesCollection(ser).Format.Fill.ForeColor.Brightness = shd
実行時エラー'-2147467259(80004005)': 'Brightness' メソッドは失敗しました: 'ColorFormat' オブジェクト
なぜ使えないのかわかりません・・・。
仕方がないので、代替え案を考えました。
グラフの線色からRGBを取得
既に「ForeColor.ObjectThemeColor」「ForeColor.Brightness」で、テーマの色・色の明暗を設定済の折れ線グラフの線色から、RGBを取得し、それをマーカーの塗りに設定します。
1.折れ線の線色からRGBを取得し、変数「MyColor_RGB」に格納します。
MyColor_RGB = cht.SeriesCollection(ser).Format.Line.ForeColor.RGB
2.変数「MyColor_RGB」を、変数「R(赤)」「G(緑)」「B(青)」に変換します。
R = MyColor_RGB Mod 256 'RED(赤) G = Int(MyColor_RGB / 256) Mod 256 'GREEN(緑) B = Int(MyColor_RGB / 256 / 256) 'BLUE(青)
3.マーカーの塗りをRGBで指定します。
cht.SeriesCollection(ser).Format.Fill.ForeColor.RGB = RGB(R, G, B) 'マーカーの塗り:色の明暗
テーマの配色を変えてもグラフの線色は変わりません
今回と同様の手法でセルにテーマの色を設定した場合、テーマの配色を変更するとテーマの影響を受けて色が変わってしまいます。
参考:エクセル VBA セルの塗りつぶしに【配色テーマ Office】の色を設定(Excel VBA)
参考:エクセル VBA セルの塗りつぶしに【配色テーマ Office 2007-2010】の色を設定(Excel VBA)
しかし、今回の処理でグラフの線色を変更した場合、テーマの配色を変更してもマーカーの塗り、線色は変わりませんでした。「テーマの色に限りなく近い色」のため、テーマの配色の影響は受けないようです。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
テーマの色には影響されません。
参照
系列が1つのグラフを自動大量連続作成(Excel VBA)
「実行時エラー 1004」を出さずに、ワークシート内のグラフを「グラフ 元」以外全て削除(Excel VBA)
グラフの参照先を変えると勝手にグラフの色が変わる現象を解決せよ
系列が複数あるグラフを自動大量連続作成(Excel VBA)
n行毎の改ページ設定 「実行時エラー1004 RangeクラスのPageBreakプロパティを設定できません」の原因(Excel VBA)
参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
複数系列・参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
大量の画像やグラフ等のオブジェクトで画面表示が遅いのを解決(Excel)
エクセル シートに画像が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセルシート上 全てのオブジェクト(画像・図形・グラフ等)を選択し、削除する(Excel VBA)
エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)
エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル シートに図形が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル 選択しているセル範囲に写真が存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲にグラフが存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲に図形が存在しているか(有無)を確認(Excel VBA)
エクセル 選択セル範囲の写真を削除する(Excel VBA)
エクセル 選択セル範囲のグラフを削除する(Excel VBA)
エクセル 選択セル範囲の図形を削除する(Excel VBA)
Excel VBAでワードを起動して文字を入力操作(Excel VBA)
Excel VBAでワードを起動してエクセルの表をワードに貼付け(Excel VBA)
Excel VBAでワードを起動して エクセルのエクセルの表を図としてワードに貼付け(Excel VBA)
Word コピー貼付けした図が白い枠だけ?図が表示されない現象を解決
Excel VBAでワードを起動して グラフをワードに図として貼付け(Excel VBA)
Excel VBAでワードを起動して 複数のグラフをワードに図として貼付け(Excel VBA)
エクセル VBA グラフにタイトルを追加する(Excel VBA)
エクセル VBA グラフのタイトルテキストを取・する(Excel VBA)
エクセル VBA グラフに凡例を追加する(Excel VBA)
エクセル VBA グラフオブジェクトの名前を変更する(Excel VBA)
エクセルVBA アクティブなグラフからChartObjectを変数にセット(Excel VBA)
エクセル VBA アクティブなグラフの名前を取得する(Excel VBA)
エクセル VBA【配色テーマ Office】セルの塗りつぶしのテーマの色・色の明暗を取得
エクセル VBA【配色テーマ Office 2007 – 2010】セルの塗りつぶしのテーマの色・色の明暗を取得
エクセル VBA セルの塗りつぶしに【配色テーマ Office】の色を設定(Excel VBA)
エクセル VBA セルの塗りつぶしに【配色テーマ Office 2007-2010】の色を設定(Excel VBA)
エクセル VBA【配色テーマ Office】セルの塗り テーマの色からRGB(赤・緑・青)を取得せよ
エクセル VBA【配色テーマ Office 2007-2010】セルの塗り テーマの色からRGB(赤・緑・青)を取得せよ
エクセル VBA 折れ線グラフの線色をテーマの色【Office】6色に変更する
エクセル VBA 折れ線グラフの線色をテーマの色【Office 2007 – 2010】6色に変更する
エクセル VBA 棒グラフ系列の塗りつぶし・線色をテーマの色【Office】6色に変更する
エクセル VBA 棒グラフ系列の塗りつぶし・線色をテーマの色【Office 2007 – 2010】6色に変更する
エクセル VBA マーカー付き折れ線グラフ系列の塗り・線色をテーマの色【Office】6色に変更する
エクセル VBA マーカー付き折れ線グラフ系列の塗り・線色をテーマの色【Office 2007-2010】6色に変更する
エクセル VBA マーカー付き折れ線グラフ系列の塗り・線色をテーマの色【Office】36色に変更する