2023/11/28

Notes - Excel 連携:#27)セルの背景色や文字色の設定

第 20 回からスタートした『帳票の作成』シリーズの 8 回目です。

帳票のヘッダ部分の装飾を題材に、前回紹介した罫線以外のセルの装飾についてまとめます。今回もセルを取り扱いますので、起点となるオブジェクトは Range となります。


背景色の設定

Range オブジェクトには Interior プロパティが存在します。このプロパティから取得できる Interior オブジェクトで背景色の設定を行うことができます。

Interior オブジェクト (Excel)

Microsoft Learn で仕様を確認するとプロパティしか定義されいません。主なプロパティは次の通りですが、背景色をセットするためのオブジェクトと理解して差しさわりないようですね。

プロパティ 説明
Color 背景色
Pattern 網掛けのパターン
(設定値については XlPattern 列挙 を参照)
PatternColor 網掛けの色


文字の色と装飾

セル内の文字の装飾は Range オブジェクトの Font プロパティから Font オブジェクト を取得できます。

この Font オブジェクトに色を設定する Color プロパティが存在します。他には、太字(Bold)や下線(Underline)などの装飾、第 21 回 で利用したフォント(Name)や文字サイズ(Size)も存在します。


文字揃え

セル内の文字揃えは Range オブジェクトの HorizontalAlignment プロパティ で行います。設定できる値は XlHAlign 列挙 に定義されています。主な値は次の通りです。

定数 説明
-4131 xlHAlignLeft 左揃え
-4108 xlHAlignCenter 中央揃え
-4152 xlHAlignRight 右揃え
1 xlHAlignGeneral データの種類に従って揃える

xlHAlignGeneral は Excel らしい設定ですね。これらの定数はスクリプトライブラリ lsXls に登録しておきましょう。


表のタイトル部分の設定

タイトル行背景をグレーに設定し、文字を白色に設定します。ヘッダ部分を設定する関数 xDrawHeader を新規で作成します。関数の引数は、Worksheet オブジェクトで、メインルーチン次のようになります。

Function xDrawHeader(voSheet As Variant)
   Dim oRange As Variant
   Dim s As String

   'ヘッダ行(背景と文字色)
   s = GetRangeString(xciHeaderRows, 2, xciHeaderRows, 9)
   Set oRange = voSheet.Range(s)
   oRange.Interior.Color = RGB(128, 128, 128)
   oRange.Font.Color = RGB(255, 255, 255)

End Function

続いて数値項目のタイトルを右寄せにします。数値項目は C 列 ~ I 列なので次のようになります。

   'ヘッダ行(揃え)
   s = GetRangeString(xciHeaderRows, 3, xciHeaderRows, 9)
   Set oRange = voSheet.Range(s)
   oRange.HorizontalAlignment = xlHAlignRight

ここまでを実行すると、以下のようにタイトルと数値の寄せがずれる現象が発生します。

これは、初期化処理で数値のセルで次のように指定したからです(第 22 回 参照)。最後のアンダースコアとスペースが右側に1文字分スペースを入れる設定になります。

   voSheet.Range("C:I").NumberFormatLocal = "#,##0_ " '数値

同様の設定は文字列のセルでも可能です。次の行を追加すると揃えることができます。

   oRange.NumberFormatLocal = "@_ "


出力日時の表示

2行目の出力日時の表示は次のように記述します。値としては現在時刻をセットしているだけで、Excel の書式と揃えで見た目を整えています。

   '出力日時
   Set oRange = voSheet.Cells(2, 2)
   oRange.HorizontalAlignment = xlHAlignRight
   oRange.NumberFormatLocal = |yyyy/m/d hh:mm "出力"|
   oRange.Value = Now


帳票タイトルの表示

同様に帳票のタイトルの設定を行います。タイトルは、文字を大きく、太字と下線を設定しています。タイトルも出力日時と同様に書式を使って

   '帳票タイトル
   Set oRange = voSheet.Cells(3, 2)
   oRange.HorizontalAlignment = xlHAlignCenter
   oRange.NumberFormatLocal = |"プリンタ出力費用一覧("yyyy"年"m"月)"|
   oRange.Font.Size = 16
   oRange.Font.Bold = True
   oRange.Font.Underline = True
   oRange.Value = oRange.Value

タイトルも出力日時と同様に書式を使って表示を整えています。書式は値をセットする前に設定しておかないと反映されないようです。一番下の『oRange.Value = oRange.Value』で自分自身の値を代入することで、書式を有効化しています。


なお、上記コードは帳票タイトルのセルに出力年月が日付値で入っている前提となっています。そのため、第 23 回 で作成した xPrintUsages 関数に以下のコードを追加しておく必要があります。

   '帳票タイトル用に年月を日付値でセット
   voSheet.Cells(3, 2).Value = DateNumber(viYear, viMonth, 1)


まとめ

これで、帳票の見た目部分は完成となります。実行すると次のようなシートが出力されます。

ノーツのデータから Excel で帳票を出力する方法を紹介しました。さまざまな Excel のオブジェクトを利用しましたが、そのほとんどが Range オブジェクトを起点としていました。

Worksheet オブジェクトの Cells や Range プロパティ、Rows や Columns プロパティなどを使用して Range オブジェクトの取得方法とその Range オブジェクトからどのような操作ができるのかを習得することが重要ですね。


前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿