
この記事ではExcel VBAで罫線を引く方法について、使用例を交えてご説明します。
罫線の種類
VBAで使用する罫線は様々な設定が可能です。
・線種(LineStyle)
・線幅(Weight)
・線色(Color)
それぞれの設定について解説します。
線種(LineStyle)
VBAで設定できる罫線の線種は以下になります。
<線種> | <対応コード> |
なし | xlLineStyleNone |
実線![]() | xlContinuous |
点線![]() | xlDot |
二点鎖線![]() | xlDashDotDot |
一点鎖線![]() | xlDashDot |
破線![]() | xlDash |
二本線![]() | xlDouble |
線幅(Weight)
VBAで設定できる罫線の線幅が以下になります。
線幅 | 対応コード |
細線 | xlHairline |
通常 | xlThin |
太線 | xlMedium |
極太線 | xlThick |
線色(Color)
VBAで設定できる罫線の色はColorプロパティ(RGB)やColorIndexで設定します。
実際に引いてみよう(サンプルコード)
その前に、指定セルの4辺の内のどこに罫線を引くかを指定する必要があります。
指定の仕方は下図のよう、xEdge + 上下左右(Top, Bottom, Left, Right)で指定します。

それでは、実際に罫線を引くプログラムを書いてみます。
まず、「B2」セルの下側に赤の罫線を引いてみます。
Sub 罫線を引く()
''B2セルに赤色の下線を引く
With Range("B2").Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(255, 0, 0)
End With
End Sub
<実行後>

このように、指定した「B2」セルの下側に赤線が引かれました。
では次に、「B2」~「E10」セル範囲で格子状に罫線を引きます。
格子線を引く時は、先述した上下左右の指定をしません。
Sub 罫線を引く_格子状()
''B2~E10セルに格子線を引く
With Range("B2:E10").Borders ’上下左右の指定をしない
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub
<実行前>

<実行後>

私の経験上では、罫線を引く際に最も使用する頻度が高いのがこの格子線になります。
実用例(サンプルコード)
ここからは私がコーディングする中でよく使う方法をサンプルにしてご紹介します。
別シートを参照して一覧を作成する(同時に罫線も引く)
参照シート:「生徒点数」
出力シート:「生徒点数_理系」
プログラムの内容:「生徒点数」シート内から、理系科目(数学、理科)だけを抽出し、各科目点数と合計点数を出力し、最後に格子状の罫線を引く。
シート「生徒点数」

シート「生徒点数_理系」

Sub 理系科目の抽出()
Dim from_ws As Worksheet
Dim to_ws As Worksheet
Dim i As Long
Dim lR As Long
Dim math_C As Integer
Dim science_C As Integer
Dim math_Point As Long
Dim science_Point As Long
Dim sum_Point As Long
With ThisWorkbook
Set from_ws = .Worksheets("生徒点数")
Set to_ws = .Worksheets("生徒点数_理系")
End With
lR = from_ws.Range("A" & Rows.Count).End(xlUp).Row
math_C = 6
science_C = 8
For i = 2 To lR
math_Point = from_ws.Cells(i, math_C).Value
science_Point = from_ws.Cells(i, science_C).Value
sum_Point = math_Point + science_Point
to_ws.Cells(i, 1) = from_ws.Cells(i, 1).Value
to_ws.Cells(i, 2) = from_ws.Cells(i, 2).Value
to_ws.Cells(i, 3) = from_ws.Cells(i, 3).Value
to_ws.Cells(i, 4) = from_ws.Cells(i, 4).Value
to_ws.Cells(i, 5) = math_Point
to_ws.Cells(i, 6) = science_Point
to_ws.Cells(i, 7) = sum_Point
Next i
lR = to_ws.Range("A" & Rows.Count).End(xlUp).Row
to_ws.Range("A1:G" & lR).Borders.LineStyle = xlContinuous
End Sub
<実行結果>

まとめ
罫線の使用率が最も高いのはおそらく格子罫線だと思いますので、その基本的な部分だけ知っていればいつでも応用できそうですね。
Excelは表計算ソフトですから、VBAで自動出力機能なんかを作成した際は、一緒に罫線デザインも考えてみると良いかも知れません。