Office Space : セルの背景色を変更する

Office Space

Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

セルの背景色を変更する

年を取ったのだろうかと思ったことがある場合は、簡単な方法でチェックすることができます。白黒テレビをいつごろ買ったかを覚えている方は、もう年長者の仲間入りをしています (そして白黒テレビを持っていたことを覚えている方は、たとえそれが子供のころの話でも、かなり ...)。

何が言いたいかというと、現代はカラーの時代だということです。テレビからプリンタに至るまで、すべてカラーです。それどころか、"ケチャップ" でさえも最近はさまざまな色のものが売られています。このことは、言うまでもなく、時代の最先端を行っていると見られるためには色も使いこなせなければならないことを意味します。そう考えると、Excel スプレッドシートのセルの背景色を変更できるのも必要だということになります。Excel を開いているときにセルの背景色を変更するのは簡単です。セルのパターン色を設定すればよいだけのことです。では、それをスクリプトで行うにはどうするのでしょうか。セルの背景色をプログラム的に変更することはできるのでしょうか。白黒の世界から脱することのできない、時代遅れの人間とレッテルを貼られないためには、どうすればよいのでしょうか。いったいどうすればいいのでしょうか。

いいえ、そんなに悩むことはありません。今日のコラムでは、セルの背景色を変更する方法をお教えします。出し惜しみしても仕方ないので、色についてのヒントも他に 2 つほど差し上げます。追加料金は頂きません。

お礼には及びませんが、だれかに聞かれたときのために覚えておいていただきたいことがあります。Scripting Guys の中にかつて白黒テレビを持っていた者は 1 人もいないということです。そのようなことは絶対にありません。

セルの背景色を設定するには、Interior プロパティの ColorIndex の値を指定する必要があります。その名前が示すとおり、Interior プロパティはセルの内部を表します。セルの外部の色を設定する場合は、Borders プロパティを使用します。

ColorIndex は 1 ~ 56 の整数値に設定します。これらの値はそれぞれ異なる色を表します (心配はいりません。どの値がどの色を表すかについては追々説明します)。たとえば、次のスクリプトは、新しいワークシートを作成し、セル A1 ~ D1 に値を追加し、セル B1 の背景色を 44 (オレンジがかった黄色) に設定します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objExcel.Cells(1, 1).Value = "A"
objExcel.Cells(1, 2).Value = "B"
objExcel.Cells(1, 3).Value = "C"
objExcel.Cells(1, 4).Value = "D"

objExcel.Cells(1, 2).Interior.ColorIndex = 44

このスクリプトを実行すると、次のようなスプレッドシートが作成されます。

Microsoft Excel

このようなスプレッドシートを見ると、かのミケランジェロが持っていて私たちスクリプト ライターが持っていないものは何なのかと思いますね。

もちろん、鍵となる部分は Interior.ColorIndex プロパティの値を指定する次のコードです。

objExcel.Cells(1, 2).Interior.ColorIndex = 44

これだけです。このコードを実行すると、セルはきれいなオレンジ色に変わります。

もちろん、背景色をセル単位でしか設定できないわけではありません。セルの範囲全体の背景色を一度に設定することもできます。たとえば、次のスクリプトは、セル A1 ~ D1 に値を入力し、ワークシートの UsedRange プロパティを使用して、それら 4 つのセルを含む範囲を作成します。そして、次のコードによって、その範囲内の各セルの背景色を設定します。

objRange.Interior.ColorIndex = 44

スクリプトの全体を次に示します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objExcel.Cells(1, 1).Value = "A"
objExcel.Cells(1, 2).Value = "B"
objExcel.Cells(1, 3).Value = "C"
objExcel.Cells(1, 4).Value = "D"

Set objRange = objWorksheet.UsedRange
objRange.Interior.ColorIndex = 44

ここで知っておいていただきたいのは、セル (またはセルのグループ) の背景色を 1 ~ 56 のどの値にも簡単に設定できることです。また、それ以上に知っていれば役に立つことは、背景色を 13、17、または 38 に設定したときに、セルが実際にどのような色になるのか (緑なのか、赤なのか、それともマゼンタなのか) ということです。実のところ、これらのカラー インデックスについて説明したドキュメントが存在するかどうかは把握していません。しかし、1 ~ 56 の値とそれぞれに対応するカラー インデックスを表示するスクリプトを作成するのは至って簡単です。その証拠として、この操作を実行するスクリプトを次に示します。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

For i = 1 to 14
    objExcel.Cells(i, 1).Value = i
    objExcel.Cells(i, 2).Interior.ColorIndex = i
Next

For i = 15 to 28
    objExcel.Cells(i - 14, 3).Value = i
    objExcel.Cells(i - 14, 4).Interior.ColorIndex = i
Next

For i = 29 to 42
    objExcel.Cells(i - 28, 5).Value = i
    objExcel.Cells(i - 28, 6).Interior.ColorIndex = i
Next

For i = 43 to 56
    objExcel.Cells(i - 42, 7).Value = i
    objExcel.Cells(i - 42, 8).Interior.ColorIndex = i
Next

このスクリプトを実行すると、次のような出力が得られます。

Microsoft Excel

ご覧のとおり、13 は紫、17 は青みがかった色、38 はピンク系の色にそれぞれ対応しています。ありきたりな言い方ですが、絵のような美しさです。

セルの背景色を削除する場合は、ColorIndex の値を定数 xlColorIndexNone に設定します (この定数には値 -4142 を割り当てます)。セル B1 の背景色を設定し、3 秒後にその色を削除するサンプル スクリプトを次に示します。

Const xlColorIndexNone = -4142

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objExcel.Cells(1, 1).Value = "A"
objExcel.Cells(1, 2).Value = "B"
objExcel.Cells(1, 3).Value = "C"
objExcel.Cells(1, 4).Value = "D"
objExcel.Cells(1, 2).Interior.ColorIndex = 44

Wscript.Sleep 3000

objExcel.Cells(1, 2).Interior.ColorIndex = xlColorIndexNone

ボーナス スクリプト

ColorIndex プロパティを使用すると、セルのフォントの色を変更することもできます。セル B1 のテキストをオレンジがかった黄色に変更する場合は、次のようなスクリプトを使用します。このスクリプトではセル B1 の Font.ColorIndex プロパティに値 44 を割り当てています。

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objExcel.Cells(1, 1).Value = "A"
objExcel.Cells(1, 2).Value = "B"
objExcel.Cells(1, 3).Value = "C"
objExcel.Cells(1, 4).Value = "D"

objExcel.Cells(1, 2).Font.ColorIndex = 44