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