2023/11/25

Notes - Excel 連携:#25)罫線の設定 ①

第 20 回からスタートした『帳票の作成』シリーズの 6 回目です。今回は帳票を帳票らしく見せるために重要な要素である罫線についてまとめます。


設定方法

Excel で罫線を設定するには設定するセルを選択して『セルの書式設定』画面を開き、[罫線]のタブから設定します。

セルを選択して設定する操作を VBA で行うにはどうするでしょうか?

そうです。セルの範囲に対する操作ですから、Range オブジェクトを使うということになりますね。その Range オブジェクトには罫線を操作するためのプロパティ Borders があります。

Range.Borders プロパティ (Excel)

このプロパティは引数が1つあり、どの部分の罫線を取得するかを指定する必要があります。指定できる値は XlBordersIndex 列挙 として定義されていて、主な値は次の通りです。

定数 説明
7 xlEdgeLeft 範囲の左側の罫線
8 xlEdgeTop 範囲の上側の罫線
9 xlEdgeBottom 範囲の下側の罫線
10 xlEdgeRight 範囲の右側の罫線
11 xlInsideVertical 範囲の外側を除くすべての垂直罫線
12 xlInsideHorizontal 範囲の外側を除くすべての水平罫線


罫線のプロパティ

Borders プロパティの型は Borders オブジェクト となります。このオブジェクトに罫線のスタイルを設定するプロパティが存在します。今回使用するのは次の3つです。

プロパティ 説明
LineStyle 罫線のスタイル
Weight 罫線の幅
Color 罫線の色


LineStyle はその名の通り、実線や破線などの罫線の種類です。XlLineStyle 列挙 として定義されており、代表的なものは次の通りです。

定数 説明
1 xlContinuous 実線
-4119 xlDouble 2 本線
-4115 xlDash 破線
-4142 xlLineStyleNone なし


Weight は罫線の太さですが、次の4種類が XlBorderWeight 列挙 として定義されています。

定数 説明
1 xlHairline 細線 (最も細い罫線)
2 xlThin 極細
-4138 xlMedium 普通
4 xlThick 太線 (最も太い罫線)


Excel の UI とプロパティの関係

セルの書式設定の「線」の選択肢では、複数のプロパティを一度に設定するようになっています。例えば、罫線のスタイル(LineStyle)を xlContinuous に限定すると次のように4つすべての太さが表示されています。

同様に「プリセット」の外側では、選択範囲の外側(XlBordersIndex 列挙 の上下左右)を一括設定できます。このように、Excel の UI では、複数のプロパティをまとめて設定するようになっていて、操作性を向上させています。


罫線の色の指定

今回はテーマを使用せず、直接色を指定する方法で作成します。Excel の VBA には RGB という関数存在します。この関数の戻り値を Borders オブジェクトの Color プロパティにセットすると罫線の色が設定できます。

RGB 関数

この関数を LotusScript で作成すると次のようになります。

Public Function RGB(_
              ByVal vbyR As Byte, ByVal vbyG As Byte, ByVal vbyB As Byte) As Long
    RGB = vbyR + CLng(vbyG) * 256 + CLng(vbyB) * 256 ^ 2
End Function


スクリプトライブラリの更新

上記の RGB 関数や前回作成の行と列を A1 形式に変換する関数は、この先何度も使用することが想定されます。そこで、これら関数をスクリプトライブラリに追加します。

グラフの作成で利用したスクリプトライブラリに追加します(#16, #17, #18)。なお、今回より、スクリプトライブラリ名を lsXls に変更していますのでご注意ください。

現時点でのスクリプトライブラリのコードは次の通りとなります。

なお、スクリプトライブラリ化にあたり、一般的に利用しそうな関数は Public として定義しています。また、Range プロパティでセルの範囲を指定する文字列(ex. A3:H12)を作成する関数 GetRangeString を追加しています。

Option Declare

'XlAxisType 列挙 (Excel)
Public Const xlCategory = 1
Public Const xlValue = 2

'XlCategoryType 列挙 (Excel)
Public Const xlAutomaticScale = -4105
Public Const xlCategoryScale = 2
Public Const xlTimeScale = 3

'MsoChartElementType 列挙 (Excel)
Public Const msoCategoryGridLinesMajor = 334
Public Const msoValueGridLinesMinorMajor = 331
Public Const msoCategoryGridLinesMinorMajor = 335

'XlBordersIndex 列挙 (Excel)
Public Const xlEdgeLeft = 7 '範囲の左側の罫線
Public Const xlEdgeTop = 8 '範囲の上側の罫線
Public Const xlEdgeBottom = 9 '範囲の下側の罫線
Public Const xlEdgeRight = 10 '範囲の右側の罫線
Public Const xlInsideVertical = 11 '範囲の外側を除くすべての垂直罫線
Public Const xlInsideHorizontal = 12 '範囲の外側を除くすべての水平罫線

'XlBorderWeight 列挙 (Excel)
Public Const xlHairline = 1 '細線 (最も細い罫線)
Public Const xlMedium = -4138 '普通
Public Const xlThin = 2 '極細
Public Const xlThick = 4 '太線 (最も太い罫線)

'XlLineStyle 列挙 (Excel)
Public Const xlContinuous = 1 '実線
Public Const xlDouble = -4119 '2 本線
Public Const xlLineStyleNone = -4142 'なし
Public Const xlDash = -4115 '破線

Public Function GetRangeString(_
      ByVal viRowFm As Integer, ByVal viColFm As Integer, _
      ByVal viRowTo As Integer, ByVal viColTo As Integer) As String
   Dim s As String

   s = RCToA1(viRowFm, viColFm)
   s = s & ":" & RCToA1(viRowTo, viColTo)

   GetRangeString = s
End Function

Public Function RCToA1(ByVal viRow As Integer, ByVal viCol As Integer) As String
   RCToA1 = x9ToA(viCol) & CStr(viRow)
End Function

Public Function RGB(_
      ByVal vbyR As Byte, ByVal vbyG As Byte, ByVal vbyB As Byte) As Long
   RGB = vbyR + CLng(vbyG) * 256 + CLng(vbyB) * 256 ^ 2
End Function

Function x9ToA(ByVal viColNumber As Integer) As String
   Dim i As Integer
   Dim i1 As Integer
   Dim i2 As Integer
   Dim s As String

   i = viColNumber - 1
   i1 = (i Mod 26) + 1
   i2 = Int(i / 26)

   If i2 > 0 Then s = Chr(64 + i2)
   s = s & Chr(64 + i1)

   x9ToA = s
End Function


続きは次回

これで罫線の設定に必要な材料はそろいました。

ただ、少し長くなったので今回はここまででとします。次回は、このライブラリを使って実際に罫線を設定します。


前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿