前回は、罫線の設定に必要な情報収集とライブラリの準備を行いました。今回は、これらを利用して、作成中の帳票に罫線を設定します。
ライブラリの組み込みと重複排除
まずは前回作成したスクリプトライブラリ 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 件のコメント:
コメントを投稿