VBAで罫線を表すオブジェクトは、Borderオブジェクトです。セルに罫線を引く(または削除する)には、Borderオブジェクトまたは、Borderオブジェクトを要素に持つBordersコレクションの各種プロパティに適切な値を設定します。
セル範囲の罫線を取得する
セル(範囲)のBorderオブジェクトまたはBordersコレクションを取得するには、RangeオブジェクトのBordersプロパティを使います。
RangeオブジェクトのBordersプロパティを使うと、指定されたオブジェクト(セル範囲)の罫線を表すBorderオブジェクトまたはBorderオブジェクトを要素とするBordersオブジェクトを取得することが出来ます。これらのオブジェクトのプロパティを設定することで、罫線を引いたり、罫線のスタイルを変更することが出来ます。
セル範囲の特定の罫線を取得する
RangeオブジェクトのBordersプロパティに括弧で囲んで「罫線の位置」を指定すると、その位置の罫線を表すBorderオブジェクトを取得できます。
Rangeオブジェクト.Borders(罫線の位置)
罫線の位置はXlBordersIndex列挙型の定数で指定します。定数には次のものがあります。
| 名前 | 値 | 説明 |
|---|---|---|
| xlEdgeLeft | 7 | 範囲の左端の垂直線 |
| xlEdgeTop | 8 | 範囲の上端の水平線 |
| xlEdgeBottom | 9 | 範囲の下端の水平線 |
| xlEdgeRight | 10 | 範囲の右端の垂直線 |
| xlInsideHorizontal | 12 | 範囲の内側のすべてのセルの水平線 |
| xlInsideVertical | 11 | 範囲の内側のすべてのセルの垂直線 |
| xlDiagonalDown | 5 | 範囲の各セルの左上から右下に引かれる罫線 |
| xlDiagonalUp | 6 | 範囲の各セルの左下から右上に引かれる罫線 |
これらの定数は[セルの書式設定ダイアログ]の[罫線タブ]と以下の図のように対応しています。

次の例は、セル範囲(B2:E5)のxlEdgeLeft、xlEdgeTop、xlEdgeBottom、xlEdgeRightのBorderオブジェクトを順に取得し、それらのBorderオブジェクトのLineStyleプロパティとWeightプロパティを設定します。このコードを実行するとセル範囲(B2:E5)の周りに太い罫線が引かれます。
Sub sample()
Dim i As Long
For i = xlEdgeLeft To xlEdgeRight
Range("B2:E5").Borders(i).LineStyle = xlContinuous
Range("B2:E5").Borders(i).Weight = xlThick
Next
End Sub
セル範囲のBordersコレクション
RangeオブジェクトのBordersプロパティを引数を指定せずに単に参照すると、指定したセル範囲のBorderオブジェクトを要素とするBordersコレクションを取得できます。
Rangeオブジェクト.Borders
次の例はBordersコレクションをForステートメントでループし、Borderオブジェクトのプロパティを繰り返し設定しています。このコードを実行すると太い罫線が色を変えながら順に引かれます。
Sub sample()
Dim b As Border
Dim i As Long
i = 10
For Each b In Range("B2:E5").Borders
b.LineStyle = xlContinuous
b.Weight = xlThick
b.ColorIndex = i
i = i + 1
MsgBox "罫線が引かれました!"
Next
End Sub
Bordersコレクションのプロパティ(この後に説明するLineStyleプロパティ、Weightなど)に値を設定すると、斜線以外のすべての罫線に値が設定されます。
したがって次の例は、格子状に罫線を引きます。
Sub sample()
Range("B2:E5").Borders.LineStyle = xlContinuous
End Sub

罫線のスタイル
罫線にはさまざまなスタイルがあります。罫線のスタイルは、BorderオブジェクトまたはBordersコレクションのLineStyleプロパティが保持します。
LineStyleプロパティの値の参照や設定の構文は次の通りです。
Rangeオブジェクト.Borders(罫線の位置).LineStyle
Rangeオブジェクト.Borders(罫線の位置).LineStyle = 罫線のスタイル
Rangeオブジェクト.Borders.LineStyle
Rangeオブジェクト.Borders.LineStyle = 罫線のスタイル
LineStyleプロパティに設定する「罫線のスタイル」は、XlLineStyle列挙型で定義されている次の定数を指定します。
| 名前 | 値 | 説明 |
|---|---|---|
| xlContinuous | 1 | 細実線 |
| xlDash | -4115 | 破線 |
| xlDashDot | 4 | 一点鎖線 |
| xlDashDotDot | 5 | ニ点鎖線 |
| xlDot | -4118 | 点線 |
| xlDouble | -4119 | 二重線 |
| xlLineStyleNone | -4142 | なし |
| xlSlantDashDot | 13 | 斜め破線 |
LineStyleプロパティ(とこの後説明するWeightプロパティ)は、[セルの書式設定ダイアログ]の[罫線]タグの[スタイル」に対応しています。

次のコードは、セル範囲に格子状の破線を引きます。
Sub sample()
Range("B2:E5").Borders.LineStyle = xlDash
End Sub

罫線の太さ
罫線の太さは、BorderオブジェクトまたはBordersコレクションのWeightプロパティが保持します。Weightプロパティの値の参照や設定の構文は次の通りです。
Rangeオブジェクト.Borders(罫線の位置).Weight
Rangeオブジェクト.Borders(罫線の位置).Weight = 罫線の太さ
Rangeオブジェクト.Borders.Weight
Rangeオブジェクト.Borders.Weight = 罫線の太さ
Weightプロパティに設定する罫線の太さは、XlBorderWeight列挙型の定数を指定します。
| 名前 | 値 | 説明 |
|---|---|---|
| xlMedium | -4138 | 中 |
| xlHairline | 1 | 極細 |
| xlThin | 2 | 細 |
| xlThick | 4 | 太 |
次の例は、格子状に太い罫線を引きます。
Sub sample()
Range("B2:E5").Borders.Weight = xlThick
End Sub

罫線の色
罫線の色は、BorderオブジェクトまたはBordersコレクションのColorプロパティまたはColorIndexが保持します。
RGB値で色を設定する ― Colorプロパティ
Colorプロパティには色を表すLong型のRGB値を設定します。Colorプロパティを参照すると設定されているRGB値をLong型で返します。値の参照および設定する構文は次の通りです。
Rangeオブジェクト.Borders(罫線の位置).Color
Rangeオブジェクト.Borders(罫線の位置).Color = RGB値
Rangeオブジェクト.Borders.Color
Rangeオブジェクト.Borders.Color = RGB値
RGB値はRGB関数を使って生成することが出来ます。構文は次の通りです。引数のred、green、blueには、それぞれの色の成分を0~255の範囲の整数値で指定します。
RGB(red, green, blue)
RGB値にはXlRgbColor列挙型で定義された定数を使うこともできます。
インデックス番号で色を設定する ― ColorIndexプロパティ
ColorIndexプロパティには、カラーパレットのインデックス番号、またはXlColorIndex列挙型で定義されている定数を指定します。値の参照および設定する構文は次の通りです。
Rangeオブジェクト.Borders(罫線の位置).ColorIndex
Rangeオブジェクト.Borders(罫線の位置).ColorIndex = インデックス番号またはlColorIndex列挙型の定数
Rangeオブジェクト.Borders.ColorIndex
Rangeオブジェクト.Borders.ColorIndex = インデックス番号またはlColorIndex列挙型の定数
カラーパレットのインデックス番号は1~56です。XlColorIndex列挙型の定数は次の表の通りです。
| 名前 | 値 | 説明 |
|---|---|---|
| xlColorIndexAutomatic | -4105 | 自動設定 |
| xlColorIndexNone | -4142 | 色なし |