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)

エクセル内のアイコンを取得します。「右クリックメニューの変更」のFaceIdとして使用します。2003までなら、ツールバーが追加されます。2007以降では、リボンのアドインの中に追加されます。ConststartNoAsInteger=1'開始番号を指定 ConststopNoAsInteger=50'終了番号を指…
素数を求めるマクロ
素数とは、1と自分自身以外に正の約数を持たない、1でない自然数のことです、この素数を求めて、シートに出力するマクロになります。特に何かに使えると言う事もないので、PCの計算能力って、どの程度なのかを実感してみるくらいの事でしょうか。注意 このマクロはオーバーフローするまで停止しません。
入力規則のリスト入力の妥当性判定
・入力規則に反するデータかの判定Function ・入力規則のリスト入力の妥当性を判定Function ・最後に
配色を使用したカラー設定を固定カラーに変更
指定セルに名前定義されているか判定する
・指定セル範囲が何らかの名前定義に含まれているか ・指定セル範囲と同一範囲の名前定義があるか ・すでに設定されている名前定義を削除してから再設定 ・マクロVBAでの名前定義について
Excel2003(xls)を2007以降(xlsx,xlsm)に変換する(HasVBProject)
Excel2003形式(xls)のファイルを、一括でExcel2007以降形式(xlsx,xlsm)に変換するマクロVBAサンプルコードです。サンプルコードでは、サブフォルダ「Excelファイル」にあるxlsを、マクロ無しならxlsx、マクロ有りならxlsmにして保存しています。
ハイパーリンクからファイルのフルパスを取得する
ハイパーリンクのリンク先ファイル情報を取得しようとすると、なかなか難しいことになります、ハイパーリンクからパスを取得すると相対パスとなり、簡単にはファイル情報を取得出来ません。以下のサンプルでは、ハイパーリンクの設定されているセルの右隣のセルに更新日時を出力しています。
ボタンに表示されているテキストを取得(Application.Caller)
メニューのシートを作成して、ボタンを配置、そしてボタンにより指定シートに移動する。よくありますが、ボタン一つずつに別々(移動先のシート毎に)のマクロを作成するのは面倒です、そこで、一つのマクロで済ませる方法の紹介です。Application.Caller Application.Callerは、VBAを呼び出した方…
Excelの表をPowerPointへ図として貼り付け
・Excelの表をPowerPointへ図として貼り付けるVBA ・Excelの表をPowerPointへ図として貼り付けるVBAの解説 ・グラフをPowerPointへ貼り付け ・既にパワーポイントを開いている場合
VBAで表やグラフをPowerPointへ貼り付ける
・表やグラフをPowerPointへ貼り付けるVBA ・PowerPointを使う準備と保存終了 ・表(セル範囲)をPowerPointへ貼り付けるVBAの解説 ・グラフをPowerPointへ貼り付けるVBAの解説 ・貼り付け時のエラー対応 ・既にパワーポイントを開いている場合
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
VBAでフォルダを削除するにはRmDirステートメントを使いますが、サブフォルダやファイルが入っている場合は、RmDirはエラーとなります。そこで、サブフォルダやファイルがある場合は、FileSystemObjectを使います。以下のサンプル使用時には、「ツール」→「参照設定」で、「MicrosoftScripti…


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

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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