機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA > Excel 2007以降のグラフ

テーマの色について



Excel 2007から、文字やセルの背景色などに使用できる色が増えました。リボンのボタンをクリックすると、今までにない淡い中間色を選択できます。



ここ、よく見ると「テーマの色」と書かれています。実は、Excel 2007から「テーマ」という機能が追加されました。「テーマ」は、いわば"見た目に関するテンプレート"のようなものです。ブックに適用するテーマを変更すると「テーマの色」も変わります。

テーマを切り替えるには、[ページレイアウト]タブ左端にある[テーマ]ボタンをクリックします。



標準は、左上の[Office]です。テーマを変更すると、「テーマの色」は次のように変わります。



各テーマの配色は、[ページレイアウト]タブ[テーマ]グループの[配色]ボタンをクリックすると表示されます。



このテーマの色を使う操作は、マクロ記録で次のように記録されます。



Sub Macro1()
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub



Sub Macro2()
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249977111117893
        .PatternTintAndShade = 0
    End With
End Sub

テーマの色を指定するには、ThemeColorプロパティに、次の定数を指定します。。


セルにテーマの色を設定すると、上記のように「xl○○」の定数が記録され、グラフでテーマの色を設定すると、上図のような「mso○○」の定数が記録されます。両者の実体数は同じですので、どちらを指定しても同じ色が設定されます。

TintAndShadeプロパティは、Excel 2007で追加されたプロパティで、色の明暗を、-1(最も暗い)から1(最も明るい)の数値(単精度浮動小数点数)で指定します。「TintAndShade = 0」が中間であり、標準の明るさです。Excel 2007から使用できる「テーマの色」は、同じ色で明るさが異なりますが、それぞれTintAndShadeプロパティが次のようになっています。



おまけ


参考までに。
テーマを切り替える、という操作をマクロ記録すると、次のようなコードが記録されます。

Sub Macro3()
    ActiveWorkbook.ApplyTheme ( _
        "C:\Program Files (x86)\Microsoft Office 2010\Document Themes 14\Origin.thmx")
End Sub

ApplyThemeはメソッドで、上記のマクロはApplyThemeメソッドの返り値を使っていません。なので、VBAのルールでは

Sub Macro3()
    ActiveWorkbook.ApplyTheme  _
        "C:\Program Files (x86)\Microsoft Office 2010\Document Themes 14\Origin.thmx"
End Sub

のように括弧がつかないはずなのですが、なぜかマクロ記録では括弧がつきます。まぁ、それはいいんですが。
要するに、マクロでテーマを変えるときは、上記のように、ApplyThemeメソッドの引数に、テーマが定義されているファイルのフルパスを指定することになります。で、C:\Program Files (x86)\Microsoft Office 2010\Document Themes 14\フォルダを見ると、なるほど複数のテーマファイル(*.thmx)が保存されています。ちなみに、それぞれのファイルは次のテーマです。

ファイル名 テーマ名
 Adjacency.thmx  ナチュラル
 Angles.thmx  アングル
 Apex.thmx  ひらめき
 Apothecary.thmx  オータム
 Aspect.thmx  シック
 Austin.thmx  オースティン
 Black Tie.thmx  フォーマル
 Civic.thmx  クール
 Clarity.thmx  クラリティ
 Composite.thmx  コンポジット
 Concourse.thmx  ビジネス
 Couture.thmx  クチュール
 Elemental.thmx  エレメント
 Equity.thmx  ジャパネスク
 Essential.thmx  エッセンシャル
 Executive.thmx  エグゼクティブ
 Flow.thmx  リゾート
 Foundry.thmx  エコロジー
 Grace.thmx  みやび
 Grid.thmx  グリッド
 Hardcover.thmx  ハードカバー
 Horizon.thmx  ホライズン
 Median.thmx  デザート
 Metro.thmx  メトロ
 Module.thmx  モジュール
 Newsprint.thmx  ニュース
 Opulent.thmx  キュート
 Oriel.thmx  スパイス
 Origin.thmx  アース
 Paper.thmx  ペーパー
 Perspective.thmx  パースペクティブ
 Pushpin.thmx  プッシュピン
 Slipstream.thmx  スリップストリーム
 Solstice.thmx  フレッシュ
 Spring Time.thmx  紅梅匂
 Technic.thmx  テクノロジー
 Thatch.thmx  ストロー
 Trek.thmx  トラベル
 Urban.thmx  アーバン
 Verve.thmx  ネオン
 Waveform.thmx  ウェーブ
 Wind in the Pines.thmx  松風
 Wistaria.thmx  雪藤

上のリストを見ると、標準の[Office]テーマがありません。ブックのテーマを[Office]に切り替える、という操作をマクロ記録すると次のようなコードが記録されます。

Sub Macro4()
    ActiveWorkbook.ApplyTheme()
End Sub

記録されたコードは、上のように、いきなり文字が赤くなっています。つまり、構文エラーです。もちろん、記録されたこのコードをそのまま実行するとエラーになります。当たり前です。何しろ、構文エラーなのですから。

では、マクロで[Office]テーマを設定するには、どうしたらいいのでしょう。
ここからは推測です。以前、Excel 2007が発売された直後、Excelの開発チームに非公式で次のような質問をしてみました。
「標準のテーマ(Office)を、ユーザーがカスタマイズできますか?」
答は「それは、できません」でした。メールではなく、直接会って聞いた質問です。標準のテーマはカスタマイズできないと。つまり、標準テーマの色やフォントなどの情報は、テーマファイル(*.thmx)に記録されているのではなく、プログラム内に組み込まれているのではないかと。だから、マクロ記録すると、ApplyThemeメソッドが記録されるものの、該当するファイルが存在しないので、ファイル名が記録されないのではないかと。そう思います。

では「現在、ブックに設定されているテーマは何か」を調べるには、どうしたらいいでしょう。Workbookオブジェクトのメンバーを調べると、次のようなプロパティがあります。



おお、いいプロパティがあるじゃないですか。で、このThemeプロパティ、いったい何を返すのでしょう。「テーマを返す」って?調べてみると、こいつが返す"テーマ"とは、OfficeThemeオブジェクトだと分かりました。



よ〜し、このOfficeThemeオブジェクトのNameプロパティとか、FullPathプロパティとかを調べれば、どんなテーマが設定されているか分かるはずです。さっそく、OfficeThemeオブジェクトのメンバーを調べてみましょう。



へ?これだけ?Nameプロパティは?ないの?
ここで、Applicationプロパティ、Creatorプロパティ、Parentプロパティが役に立たないのは一目瞭然です。使えそうなのは、ThemeColorSchemeプロパティ、ThemeEffectSchemeプロパティ、ThemeFontSchemeプロパティですが、こいつらを調べたところで、設定されているテーマの名前が分かるとは思えません。でも、まぁ、せっかくなので、ちょっと調べてみましょうか。
まずは、ThemeColorSchemeプロパティから。



なんか、おもしろそうなプロパティやメソッドはありませんね(笑)。
Colorsプロパティを使うと、そのテーマに設定されている色のRGB値が分かります。色は全部で12色あります。



こんな感じでしょうか。

Sub Sample1()
    Dim i As Long
    For i = 1 To 12
        Cells(i, 1) = convRGB(ActiveWorkbook.Theme.ThemeColorScheme.Colors(i))
    Next i
End Sub

Function convRGB(Num As Long)
    Dim R As Long, G As Long, B As Long
    B = Int(Num / 65536)
    G = Int((Num - (B * 65536)) / 256)
    R = Num - (G * 256) - (B * 65536)
    convRGB = R & ", " & G & ", " & B
End Function



続いて、ThemeEffectSchemeプロパティ。



う・・・なに、この"ハズレ感"はw

最後に、ThemeFontSchemeプロパティ



おもしろそうなのは、MajorFontプロパティとMinorFontプロパティくらいかな。

Sub Sample2()
    Dim i As Long, msg As String
    With ActiveWorkbook.Theme.ThemeFontScheme
        msg = msg & "【MajorFont】" & vbCrLf
        For i = 1 To .MajorFont.Count
            msg = msg & i & ":" & .MajorFont(i).Name & vbCrLf
        Next i
        msg = msg & "【MinorFont】" & vbCrLf
        For i = 1 To .MinorFont.Count
            msg = msg & i & ":" & .MinorFont(i).Name & vbCrLf
        Next i
    End With
    MsgBox msg
End Sub





あれ?日本語フォントは取得できないの?

なんか・・・もういいや、って感じなので、このへんでやめておきます。まぁ、マクロでテーマを操作するってのは、一般的に多くのユーザーがやる操作ではないでしょうから、いいんですけどね。



このエントリーをはてなブックマークに追加