2023/11/26

Notes - Excel 連携:#26)罫線の設定 ②

前回は、罫線の設定に必要な情報収集とライブラリの準備を行いました。今回は、これらを利用して、作成中の帳票に罫線を設定します。


ライブラリの組み込みと重複排除

まずは前回作成したスクリプトライブラリ lsXls を作成中のエージェントに組み込みます。

ライブラリに移行した関数 xRCToA1 と x9ToA は不要なので削除します。すると、関数名が変わっているので文法エラーが発生します。ライブラリの関数名 RCToA1 にすべて修正します。

xCalcSum 関数内のエラーについては、前回新規作成した関数 GetRangeString に置き換えます。


oRange.Formula = "=Sum(" & GetRangeString(iMin, viCol, iMax, viCol) & ")"


外側の罫線作画

いよいよ罫線の作画を行います。

作画の処理は、専用の関数 xDrawLine に記述します。関数の引数は、Worksheet オブジェクトと明細行の行数とします。メインルーチンは次のようになります。

Sub Initialize
      ・・・
   '計算式のセット
   Call xCalcRow(oSheet, iDoc)
   Call xCalcCol(oSheet, iDoc)

   '罫線の設定
   Call xDrawLine(oSheet, iDoc)

   'Excel を UI に表示
   oXls.Visible = True
End Sub


まずは、帳票の外側に枠線を設定します。次のように記述すると上側を

  • スタイルは ”実線”
  • 幅は ”普通”
  • 色は ”グレー”

に設定します。

Function xDrawLine(voSheet As Variant, ByVal viDoc As Integer)
   Dim oRange As Variant
   Dim oBorder As Variant

   Dim s As String
   Dim lCol As Long
   Dim iTop As Integer
   Dim iBottom As Integer

   iTop = xciHeaderRows
   iBottom = xciHeaderRows + viDoc + 1

   '色の準備
   lCol = RGB(128, 128, 128)

   '表全体
   s = GetRangeString(iTop, 2, iBottom, 9)
   Set oRange = voSheet.Range(s)

   '外枠(上)の設定
   Set oBorder = oRange.Borders(xlEdgeTop)
   oBorder.Weight = xlMedium
   oBorder.LineStyle = xlContinuous
   oBorder.Color = lCol

End Function

帳票全体にあたるセルの範囲を oRange 変数に取得し、その上側の枠線を oBorder 変数にセット。そのオブジェクトのプロパティの罫線のスタイルと幅、色を設定しています。

これを上下左右の4辺に対して設定する必要があるのですが、幸い XlBordersIndex 列挙 において 7 ~ 10 の連続した値が割り当てられています。これを利用すると次のようにループ処理でシンプルに記述できます。

   '外枠の設定
   For i = xlEdgeLeft To xlEdgeRight
      Set oBorder = oRange.Borders(i)
      oBorder.Weight = xlMedium
      oBorder.LineStyle = xlContinuous
      oBorder.Color = lCol
   Next


内側の罫線の作画

内側の罫線は、まずベースとなる実線の最も細い線、色は同じくグレーで初期設定します。内側の罫線には、縦と横の設定がありますが、こちらも XlBordersIndex 列挙 で連続した値となっています。ですので、今回もループで対応します。

   '内側のベース罫線の設定
   For i = xlInsideVertical To xlInsideHorizontal
      Set oBorder = oRange.Borders(i)
      oBorder.Weight = xlHairline
      oBorder.LineStyle = xlContinuous
      oBorder.Color = lCol
   Next


仕上げとして、初期化した罫線とは違う部分を順に設定します。

例えば、ヘッダ行の下の罫線を2重線に設定するには、そのエリアの Range オブジェクトを取得して、罫線を設定します。範囲が違うだけで手順は同じですね。

   'ヘッダ行
   s = GetRangeString(iTop, 2, iTop, 9)
   Set oRange = voSheet.Range(s)
   Set oBorder = oRange.Borders(xlEdgeBottom)
   oBorder.LineStyle = xlDouble


同様の方法で他の罫線も設定します。

最終行となる合計行の上部を2重線に設定、縦罫線は白黒とカラーの間を極細、最終列の合計を2重線に設定します。

   '合計行
   s = GetRangeString(iBottom, 2, iBottom, 9)
   Set oRange = voSheet.Range(s)
   Set oBorder = oRange.Borders(xlEdgeTop)
   oBorder.LineStyle = xlDouble

   '縦罫線
   s = GetRangeString(iTop, 3, iBottom, 5)
   Set oRange = voSheet.Range(s)
   Set oBorder = oRange.Borders(xlEdgeLeft)
   oBorder.Weight = xlThin
   Set oBorder = oRange.Borders(xlEdgeRight)
   oBorder.Weight = xlThin

   '縦罫線(合計)
   s = GetRangeString(iTop, 9, iBottom, 9)
   Set oRange = voSheet.Range(s)
   Set oBorder = oRange.Borders(xlEdgeLeft)
   oBorder.LineStyle = xlDouble


実行結果

ここまでのプログラムを実行すると次のようになります。


前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿