
Office Space へようこそ。Office Space は、Microsoft Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介するコラムです。毎週火曜日と木曜日に新しいヒントを掲載します。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
Microsoft で現在行われている議論の 1 つに次のようなものがあります (新しくランボルギーニを買うか、それとももう少しロールスロイスで我慢するかということのほかにです)。つまり、システム管理者は、美的な面にも注意を払うのか、外観の些細なことにも気を配るのか、ということです。典型的な Microsoft 社員の多くの答えはノーです。システム管理者は実務者であり、美的なことは気にかけないというのです。カラー テレビではなく白黒テレビですか。それでも結構。ストライプのシャツに水玉のズボンですか。ちょっと待って、そんなことはどうでもいいでしょ。服は服なんですから。
注 : 驚いたことに、Microsoft の従業員の多くは、コンピュータ時代の全盛期は Windows より前、システム管理者が MS-DOS のコマンド プロンプトで暗号のようなステートメントを入力するのにすべての時間を費やしていた頃であると感じているようです。もちろん、MS-DOS は究極のオペレーティング システムであったと信じているからこのように感じているのか、それとも Microsoft の株価が数時間ごとに 2 倍になっていた当時を振り返って感傷的になっているのかは、定かでありませんが、 |
Scripting Guys の少なくとも 1 人は、これに反対しています。確かに、機能と見た目の良さのどちらかを選択する場合、システム管理者は常に機能の方を選択するようです。しかし、機能と見た目が両立する場合はどうでしょう。さして手間を増やさずに、飾りを付けたレポートや美しいグラフを作成できるとしたら、どうでしょう。コードをわずか 1 行追加するだけで、次のように格好の良いグラデーションを使用した Microsoft Excel の縦棒グラフを作成できるとしたら、どうですか。

そう言っていただけると思っていました。
最初に、一般的な縦棒グラフを作成するコードを見てもらいます。このグラフでは、書式の指定がまったく行われていません。その後、この基本スクリプトの最後に数行のコードを追加するだけで、驚くほど美しいグラフになることを見てもらいます。基本スクリプトについては説明しません。Microsoft Excel の初心者は、チャートとグラフの作成に関するこのシリーズのエピソード 1 とエピソード 2 に目を通してください。
今日のコラムの基本コードは次のとおりです。
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)
objWorksheet.Cells(1,1) = "Operating System"
objWorksheet.Cells(2,1) = "Windows Server 2003"
objWorksheet.Cells(3,1) = "Windows XP"
objWorksheet.Cells(4,1) = "Windows 2000"
objWorksheet.Cells(5,1) = "Windows NT 4.0"
objWorksheet.Cells(6,1) = "Other"
objWorksheet.Cells(1,2) = "Number of Computers"
objWorksheet.Cells(2,2) = 545
objWorksheet.Cells(3,2) = 987
objWorksheet.Cells(4,2) = 611
objWorksheet.Cells(5,2) = 431
objWorksheet.Cells(6,2) = 516
Set objRange = objWorksheet.UsedRange
objRange.Select
Set colCharts = objExcel.Charts
colCharts.Add()
Set objChart = colCharts(1)
objChart.Activate
objChart.HasLegend = FALSE
objChart.ChartTitle.Text = "Operating System Use"
objChart.ChartType = -4100
このコードでは次のようなグラフが生成されます。

当然のことながら平凡なグラフです。このコラムの目的は、このようなシンプルなグラフに、少しだけ飾りを付けることです。それでは、どのようなことができるのか見ていくことにしましょう。
最初にお断りしておかなければなりませんが、利用できるすべての書式指定オプションを網羅しようとするのでは、手を付けることさえできません。お話ししなければならないことが多すぎます。ですから、チャートやグラフを飾るのに利用できるものの中でも特に興味を引かれるいくつかのことについて、概要を説明します。たいていは、私たちはなんらかの手っ取り早い方法を使用して、このような書式の指定をさらに簡単にしています。他の書式指定オプション (少し余計にコーディングが必要なカスタム オプションを含みます) に興味がある場合は、MSDN の「Microsoft Excel VBA Language Reference」(英語) を参照してください。
それでは最初に、縦棒グラフの縦棒にグラデーションの塗りつぶしを追加します。ご存じないかもしれませんが、Excel でグラデーションの塗りつぶしがいくつかあらかじめ定義されています。これらのオプションは、[塗りつぶし効果] ダイアログ ボックスにあります。

このことが重要なのでしょうか。もちろん重要です。なぜなら、Excel には PresetGradient という名前のメソッドがあり、このようなグラデーション塗りつぶしのいずれかをグラフの系列、壁面、または床面に適用できます (なんらかの理由でこのメソッドはグラフ エリアやプロット エリアには作用しないようですが、これらのオブジェクトにグラデーション塗りつぶしを適用する別の方法を紹介します)。PresetGradient を使用するには、以下のことを行う必要があります。
グラデーション スタイルに対する定数値を決定します。おそらくご存じでしょうが、グラデーションにはいくつもの種類があります。上端で塗りつぶしを開始して下に向かってグラデーションを付けたり、オブジェクトの中央で塗りつぶしを開始して中心から離れる方向にグラデーションを付けたりすることができます (これらのスタイルは、[塗りつぶし効果] ダイアログ ボックスの [グラデーションの種類] にあります)。PresetGradient を使用するときは、スクリプトで以下の値のいずれかを使用する必要があります。
定数 | 値 |
msoGradientDiagonalDown | 4 |
msoGradientDiagonalUp | 3 |
msoGradientFromCenter | 7 |
msoGradientFromCorner | 5 |
msoGradientFromTitle | 6 |
msoGradientHorizontal | 1 |
msoGradientMixed | -2 |
msoGradientVertical | 2 |
このサンプル コードでは、横のグラデーション スタイルを使用します。つまり、値 1 を指定します。
グラデーション タイプに対する定数値を決定します。[塗りつぶし効果] ダイアログ ボックスには、[バリエーション] というラベルの付いたセクションがあります。ここには、4 種類のグラデーション塗りつぶしバリエーションがあります。各バリエーションには番号が割り当てられています。

グラデーション タイプを指定するには、目的のバリエーションの番号を指定するだけです。たとえば、上端がオレンジ色っぽい赤で下端が青のグラデーションを使用するには、グラデーション タイプを指定するときに "2" を使用します。サンプルのコードでは、バリエーション "1" を使用します (グラデーション スタイルが msoGradientFromCenter の場合、グラデーション タイプは 1 または 2 だけであることに注意してください)。
グラデーションの定数値を決定します。各グラデーションには一意の定数と値があります。たとえば、これから使用する夕闇グラデーションの場合は、定数名が msoGradientNightfall で値が 3 です。どのようにして確認すればよいのでしょう。最も簡単な方法は、「Microsoft Office VBA Language Reference」(英語) を表示し、"msoPresetGradientType" をクリックしてみてください。
いろいろ説明しましたが、結局、グラフの縦棒にグラデーションの塗りつぶしを適用するには、1 行のコードを追加するだけです。
objChart.SeriesCollection(1).Fill.PresetGradient 1,1,3
ご覧のとおり、最初の (そして唯一の) データ系列の Fill オブジェクトを参照し、PresetGradient メソッドを呼び出して 3 つのパラメータを渡しています。
| • | 1 - 横グラデーション スタイルを表します。 |
| • | 1 - グラデーションの種類を表します。 |
| • | 3 - 夕闇グラデーションを表します。 |
これだけです。この 1 行のコードを基本スクリプトの最後に追加して、どのようになるか確認してください。
既に触れたように、この同じメソッドを縦棒グラフの壁面と床面にも適用できました。一方、グラフ エリアやプロット エリアには作用しませんでした (エラー メッセージは生成されず、変更は適用されたように見えましたが、画面には表示されませんでした)。これにはとても単純な説明があるのでしょうが、多くの時間をかけて調べる代わりに、回避策を使うことにします。グラフ エリアやプロット エリアにグラデーションの塗りつぶしを適用したいですか。それなら次のようなコードを使用します。
objChart.PlotArea.Fill.ForeColor.SchemeColor = 27 objChart.PlotArea.Fill.BackColor.SchemeColor = 46 objChart.PlotArea.Fill.TwoColorGradient 1,1
ご覧のとおり、ForeColor.SchemeColor と BackColor.SchemeColor を指定します (使用できる色と対応する色番号の詳細については、以前の Office Space コラムを参照してください)。次に、TwoColorGradient メソッドを呼び出して、2 つのパラメータを渡します。
| • | 1 - グラデーション スタイルを表します。 |
| • | 1 - グラデーションの種類を表します。 |
このコードを基本スクリプトの最後に追加すると、次のようなグラフができあがります。

ちなみに、この同じ方法を使用して、グラフの縦棒や他のオブジェクトを塗りつぶすこともできます。これを利用すれば、定義済みの塗りつぶしにこだわることなく、独自のグラデーションを適用できます。
今日のコラムを終える前に、他の 2 つの書式設定オプションに触れておきたいと思います。まず、定義済みのテクスチャを簡単にグラフに適用できます。必要な処理は、PresetTexured メソッドを呼びだして、目的のテクスチャを指定するだけです。グラフの縦棒を、大理石のような外見にしたいとは思いませんか。それなら、次の行を基本スクリプトに追加します。
objChart.SeriesCollection(1).Fill.PresetTextured(10)
注 : 10 を渡すと縦棒が大理石になることをどうやって知ったのでしょうか。「VBA Language Reference」(英語) で msoPresetTexture の定数名と値を調べればすぐにわかります。 |
次のような上品なグラフが新しく表示されます。

そう、私たちもなかなかいいと思いました。
最後にもう 1 つあります。次のコード行を基本スクリプトに追加して、どうなるか見てください (ファイルを変更する必要があるかもしれません)。
objChart.SetBackgroundPicture _
("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg")
問題がなければ、グラフは次のようになるはずです。

これなら、システム管理者でも喜んでくれそうです。