第 20 回からスタートした『帳票の作成』シリーズの 6 回目です。今回は帳票を帳票らしく見せるために重要な要素である罫線についてまとめます。
設定方法
Excel で罫線を設定するには設定するセルを選択して『セルの書式設定』画面を開き、[罫線]のタブから設定します。
セルを選択して設定する操作を VBA で行うにはどうするでしょうか?
そうです。セルの範囲に対する操作ですから、Range オブジェクトを使うということになりますね。その Range オブジェクトには罫線を操作するためのプロパティ Borders があります。
このプロパティは引数が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 プロパティにセットすると罫線の色が設定できます。
この関数を 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 件のコメント:
コメントを投稿