VBAサンプル集
配色を使用したカラー設定を固定カラーに変更

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2013-10-29 最終更新日:2020-04-04

配色を使用したカラー設定を固定カラーに変更


Excel2007以降なら配色を選択して作成した場合、作成したシートを他のブックに移すと色が変わってしまいます、
そこで、配色ではなくRGB値で色を再設定することで、元々の色をそのままにして、他のブックに移すことが出来るようにします。
以下は、この目的で色を再設定するマクロVBAになります。


配色を固定カラーに変更するVBA

Sub sample()
  Dim ws As Worksheet
  Dim rng As Range
  Dim gc As ChartObject
  Dim sc As Series
  Set ws = ActiveSheet
  'セルの塗りつぶしを再設定
  For Each rng In ws.UsedRange
    If rng.Interior.ColorIndex <> xlColorIndexNone Then
      rng.Interior.Color = rng.Interior.Color
    End If
  Next
  'グラフの色を再設定
  For Each gc In ws.ChartObjects 'グラフのコレクション
    For Each sc In gc.Chart.SeriesCollection '系列のコレクション
      With sc
        Select Case sc.ChartType
          Case XlChartType.xlColumnClustered '棒グラフ
            If .Interior.ColorIndex <> xlColorIndexNone Then
              .Interior.Color = .Interior.Color
            End If
            If .Border.ColorIndex <> xlColorIndexNone And _
              .Border.ColorIndex <> xlColorIndexAutomatic Then
              .Border.Color = .Border.Color
            End If
          Case XlChartType.xlLine '折れ線グラフ
            If .Interior.ColorIndex <> xlColorIndexNone Then
              .Interior.Color = .Interior.Color
            End If
            If .Border.ColorIndex <> xlColorIndexNone Then
              .Border.Color = .Border.Color
            End If
          Case XlChartType.xlLineMarkers 'マーカー付き折れ線グラフ
            If .Interior.ColorIndex <> xlColorIndexNone Then
              .Interior.Color = .Interior.Color
            End If
            If .Border.ColorIndex <> xlColorIndexNone Then
              .Border.Color = .Border.Color
            End If
            If .MarkerForegroundColor >= 0 Then
              If .MarkerForegroundColorIndex <> xlColorIndexNone Then
                .MarkerForegroundColor = .MarkerForegroundColor
              End If
            Else
              .MarkerForegroundColor = .Border.Color
            End If
            If .MarkerBackgroundColor >= 0 Then
              If .MarkerBackgroundColorIndex <> xlColorIndexNone Then
                .MarkerBackgroundColor = .MarkerBackgroundColor
              End If
            Else
              .MarkerBackgroundColor = .Border.Color
            End If
        End Select
      End With
    Next
  Next
End Sub

配色を固定カラーに変更するVBAの解説

上記のマクロVBAでは、セルの塗りつぶしと、グラフについて対応しています。
他に、オートシェイプ等々もありますが、考え方は同じになります。

また、グラフについては、

・棒グラフ
・折れ線グラフ
・マーカー付き折れ線グラフ

この3種類について対応しています。
同じコードで設定できるグラフも多いのですが、基本的にグラフ毎にクセがありますので、どのプロパティを変更するかが変わります。
特に自動設定となるプロパティが問題です。
上記のマクロなら、
マーカー付き折れ線グラフのMarkerForegroundColorやMarkerBackgroundColorになります。
この場合は、値に-1が入っている場合があり、その場合はBorder.Colorと同じになります。
探せばどこかに資料があるかもしれませんが、実際にVBAをステップ実行してカラー値を確認した方が早いと思います。

上記マクロでは配色のみ対応していますが、テーマにより見た目が変わります。
テーマによる変更に対応するVBAについては詳細は確認していませんが、これよりはるかに複雑な処理が必要になる事は間違いありません。

このように色については、その後の扱いがとても面倒なものになります。

従って、シートを他ブックへコピーや移動する可能性があるなら、テーマや配色は極力使用しない事をお勧めします。
標準のOfficeで使うか、その他の色で直接に色を設定するようにしましょう。
もし、テーマや配色を使用する場合は、
シートを使いまわし他のブックに移さないようにするか、色については変化しても構わないような色使いをするようにしてください。



同じテーマ「マクロVBAサンプル集」の記事

エクセルのアイコン取得(FaceID)
素数を求めるマクロ
入力規則のリスト入力の妥当性判定
配色を使用したカラー設定を固定カラーに変更
指定セルに名前定義されているか判定する
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
ハイパーリンクからファイルのフルパスを取得する
ボタンに表示されているテキストを取得(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
VBAで表やグラフをPowerPointへ貼り付ける
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ