Excel VBA を使って表の罫線を引く方法

2023年4月15日

Excelで表を作成するときに罫線を引くことは必須になりますが、実際に手作業で罫線を引く場合、意外と時間がかかり面倒を感じます。あらかじめ決まった表であればVBAを使って自動的に表の罫線を引くことが可能になり業務の効率化が図れます。今回はVBA で Excel の表を自動作成する際にどのように罫線を引いたらよいのかサンプルアプリを使って紹介します。

罫線を描画するサンプルアプリの説明

Excel の各種罫線を描画するサンプルアプリです。
今回のアプリを実行すると下記に示す罫線の各スタイル 1 ~ 14 の線を引くことができます。

「罫線描画」ボタンをクリックすると各スタイル 1 ~ 14 の線を引きます。右隣の 「罫線削除」 ボタンをクリックすると描かれていた罫線が消去されます。

罫線のスタイルと線種の説明

罫線の種類や太さを設定するには「LineStyle」 プロパティと「Weight」プロパティに以下の表にある設定値を指定します。線のスタイルと設定値を番号で紐付けていますので参考にしてください。
 Range(線を引く範囲).Borders(線を引く位置).LineStyle = スタイルを指定する設定値
 Range(線を引く範囲)).Borders(線を引く位置).Weight = 線種を指定する設定値

Noスタイル名線種スタイルを指定する設定値線種を指定する設定値
1線なしxlLineStyleNone
2実線細線xlContinuousxlHairline
3点線極細xlDotxlThin
4二点鎖線極細xlDashDotDotxlThin
5一点鎖線極細xlDashDotxlThin
6破線極細xlDashxlThin
7実線極細xlContinuousxlThin
8二点鎖線普通xlDashDotDotxlMedium
9斜破線普通xlSlantDashDotxlMedium
10一点鎖線普通xlDashDotxlMedium
11破線普通xlDashxlMedium
12実線普通xlContinuousxlMedium
13実線太線xlContinuousxlThick
142本線太線xlDoublexlThick

スタイルや線種と同様に線を引く箇所を指定する時にも「Borders」プロパティに以下の値を設定します。
  Range(線を引く範囲).Borders(線を引く位置).LineStyle = スタイルを指定する設定値

線を引く箇所設定値
垂直線xlInsideVertical
水平線xlInsideHorizontal
上線xlEdgeTop
左側xlEdgeLeft
下線xlEdgeBottom
右側xlEdgeRight

サンプルアプリのソースコード  コードの作成手順はこちら

'「罫線描画」ボタン
Sub ボタン1_Click()

 '1の罫線を引く
 Range("B4:D4").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone

 '2の罫線を引く
 Range("B5:D5").Borders(xlEdgeBottom).LineStyle = xlContinuous
 Range("B5:D5").Borders(xlEdgeBottom).Weight = xlHairline

 '3の罫線を引く
 Range("B6:D6").Borders(xlEdgeBottom).LineStyle = xlDot
 Range("B6:D6").Borders(xlEdgeBottom).Weight = xlThin

 '4の罫線を引く
 Range("B7:D7").Borders(xlEdgeBottom).LineStyle = xlDashDotDot
 Range("B7:D7").Borders(xlEdgeBottom).Weight = xlThin

 '5の罫線を引く
 Range("B8:D8").Borders(xlEdgeBottom).LineStyle = xlDashDot
 Range("B8:D8").Borders(xlEdgeBottom).Weight = xlThin

 '6の罫線を引く
 Range("B9:D9").Borders(xlEdgeBottom).LineStyle = xlDash
 Range("B9:D9").Borders(xlEdgeBottom).Weight = xlThin

 '7の罫線を引く
 Range("B10:D10").Borders(xlEdgeBottom).LineStyle = xlContinuous
 Range("B10:D10").Borders(xlEdgeBottom).Weight = xlThin

 '8の罫線を引く
 Range("B11:D11").Borders(xlEdgeBottom).LineStyle = xlDashDotDot
 Range("B11:D11").Borders(xlEdgeBottom).Weight = xlMedium

 '9の罫線を引く
 Range("B12:D12").Borders(xlEdgeBottom).LineStyle = xlSlantDashDot
 Range("B12:D12").Borders(xlEdgeBottom).Weight = xlMedium

 '10の罫線を引く
 Range("B13:D13").Borders(xlEdgeBottom).LineStyle = xlDashDot
 Range("B13:D13").Borders(xlEdgeBottom).Weight = xlMedium

 '11の罫線を引く
 Range("B14:D14").Borders(xlEdgeBottom).LineStyle = xlDash
 Range("B14:D14").Borders(xlEdgeBottom).Weight = xlMedium

 '12の罫線を引く
 Range("B15:D15").Borders(xlEdgeBottom).LineStyle = xlContinuous
 Range("B15:D15").Borders(xlEdgeBottom).Weight = xlMedium

 '13の罫線を引く
 Range("B16:D16").Borders(xlEdgeBottom).LineStyle = xlContinuous
 Range("B16:D16").Borders(xlEdgeBottom).Weight = xlThick

 '14の罫線を引く
 Range("B17:D17").Borders(xlEdgeBottom).LineStyle = xlDouble
 Range("B17:D17").Borders(xlEdgeBottom).Weight = xlThick

End Sub

------------------------------------------------------------------------------

'「罫線削除」ボタン
Sub ボタン2_Click()
 Dim i As Integer
 '4行目から17行目までをループ
  For i = 4 To 18
   '1~14の罫線を消去
   Range("B" & i & ":D" & i & "").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone
  Next
End Sub