テーマの色について
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
あれ?日本語フォントは取得できないの?
なんか・・・もういいや、って感じなので、このへんでやめておきます。まぁ、マクロでテーマを操作するってのは、一般的に多くのユーザーがやる操作ではないでしょうから、いいんですけどね。