セルに罫線を引く方法を解説します。
RangeオブジェクトのBordersプロパティを使用します。
基本構文
格子罫線すべてに設定する場合
設定セル範囲.Borders.LineStyle = 罫線の種類 設定セル範囲.Borders.Weight = 罫線の太さ 設定セル範囲.Borders.Color = 罫線の色
上下左右や内部罫線などから1要素だけに設定する場合
設定セル範囲.Borders(対象罫線).LineStyle = 罫線の種類 設定セル範囲.Borders(対象罫線).Weight = 罫線の太さ 設定セル範囲.Borders(対象罫線).Color = 罫線の色
セル範囲の外周部分だけを設定する場合
設定セル範囲.BorderAround 罫線の種類, 罫線の太さ, Color:=罫線の色
サンプルコード
Dim セル範囲 As Range Set セル範囲 = Range("B2:E5") ' 格子罫線を一括で設定する セル範囲.Borders.Weight = xlThin ' または セル範囲.Borders.LineStyle = xlContinuous ' 格子罫線を一括で解除する セル範囲.Borders.LineStyle = xlNone ' または セル範囲.Borders.LineStyle = xlLineStyleNone ' 格子罫線を最細線(表示は最細点線)で引く セル範囲.Borders.Weight = xlHairline ' 格子罫線を太線で引く セル範囲.Borders.Weight = xlMedium ' 格子罫線を極太線で引く セル範囲.Borders.Weight = xlThick 灰色の格子罫線を一括で設定する セル範囲.Borders.Weight = xlThin セル範囲.Borders.Color = RGB(217, 217, 217)
' セル範囲に下線を設定する セル範囲.Borders(xlEdgeBottom).Weight = xlThin ' セル範囲に二重下線を設定する セル範囲.Borders(xlEdgeBottom).LineStyle = xlDouble
' セル範囲の外周だけに罫線を設定する セル範囲.Borders(xlEdgeTop).Weight = xlThin セル範囲.Borders(xlEdgeBottom).Weight = xlThin セル範囲.Borders(xlEdgeLeft).Weight = xlThin セル範囲.Borders(xlEdgeRight).Weight = xlThin ' ↓外周であれば短縮実行可能 セル範囲.BorderAround xlContinuous ' セル範囲の外周に赤い太線を設定する セル範囲.BorderAround xlContinuous, xlMedium, Color:=RGB(255, 0, 0)
解説
セルに罫線を引くには、RangeオブジェクトのBordersプロパティを使用します。
Bordersは「マクロ記録でとんでもないコード量になる」ことで有名なプロパティで、
たった1行で終わるはずの「格子罫線を引く」コードがこんな状態になります。
' 本当はこれで完了なのに Selection.Borders.Weight = xlThin ' マクロ記録によって作られたコード Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With
後述の通り実際のところ仕組みは単純ですので、
マクロ記録に惑わされないよう注意してください。
RangeオブジェクトのBordersプロパティを使用すると、
指定した位置の罫線を設定することができます。
' セル範囲に下線を設定する セル範囲.Borders(xlEdgeBottom).Weight = xlThin
位置を指定する引数(Index)は以下の通りとなります。
| 定数名 | 罫線の位置 |
|---|---|
| xlDiagonalDown | 右下がりの斜線 |
| xlDiagonalUp | 右上がりの斜線 |
| xlEdgeTop | 範囲の上線(上端) |
| xlEdgeBottom | 範囲の下線(下端) |
| xlEdgeLeft | 範囲の左線(左端) |
| xlEdgeRight | 範囲の右線(右端) |
| xlInsideHorizontal | セル範囲内部の水平線 |
| xlInsideVertical | セル範囲内部の垂直線 |
そしてBordersプロパティを使う上で最重要といってよい仕様が、
この引数Indexを省略すると「格子罫線全体」を指してくれるという仕様です。
' これら6つの罫線(上下左右と中身の水平垂直)の設定を セル範囲.Borders(xlEdgeTop).Weight = xlThin セル範囲.Borders(xlEdgeBottom).Weight = xlThin セル範囲.Borders(xlEdgeLeft).Weight = xlThin セル範囲.Borders(xlEdgeRight).Weight = xlThin セル範囲.Borders(xlInsideHorizontal).Weight = xlThin セル範囲.Borders(xlInsideVertical).Weight = xlThin ' ↓このコード1行で実行可能 セル範囲.Borders.Weight = xlThin
これがマクロ記録でとんでもないコードが出てきた主な原因ですね。
この仕様を知っていれば罫線はかなり簡単に引けます。
続いて罫線の種類の指定ですが、こちらは
- 罫線の種類:LineStyle
- 罫線の太さ:Weight
の2種類で指定します。
設定値は以下の通りとなっておりますが、
後述の理由でグレーの値は設定する必要はありません。

◇ ダイアログ左側
| 罫線の種類 | LineStyle | Weight |
|---|---|---|
| なし | xlNone | どれでもOK |
| 最細点線 | xlContinuous | xlHairline |
| 点線 | xlDot | xlThin |
| 破線1 | xlDashDotDot | xlThin |
| 破線2 | xlDashDot | xlThin |
| 破線3 | xlDash | xlThin |
| 通常の罫線 | xlContinuous | xlThin |
※ 通常の罫線はどちらかは設定が必要
◇ ダイアログ右側
| 罫線の種類 | LineStyle | Weight |
|---|---|---|
| 太破線1 | xlDashDotDot | xlMedium |
| 太斜め破線 | xlSlantDashDot | xlMedium |
| 太破線2 | xlDashDot | xlMedium |
| 太破線3 | xlDash | xlMedium |
| 太線 | xlContinuous | xlMedium |
| 極太線 | xlContinuous | xlThick |
| 二重線 | xlDouble | xlThick |
二つの設定値で設定することにはなっていますが、
LineStyleとWeightの組み合わせはかなり限られています。
たとえば二重線はLineStyleがxlDoubleなのですが、
このときWeightはxlTickにしかなりません。
この2種類の設定は、
- 初期値(省略時)は「xlContinuous」「xlThin」が選ばれる
- 一通りしかない場合(二重線の太さなど)は自動でそれが選ばれる
という仕様のため、表のグレーの値は実際には入力する必要がありません。
よって結論としては、普段使いする罫線のほとんどは1行コードで実行可能です。
' 普通の線はWeightを設定するだけでよい(Linestyleは指定不要) セル範囲.Borders.Weight = xlThin ' 通常罫線 セル範囲.Borders.Weight = xlHairline ' 最細点線(印刷時は最細実線) セル範囲.Borders.Weight = xlMedium ' 太線 セル範囲.Borders.Weight = xlThick ' 極太線 ' 二重線や細い点線はLineStyleを設定するだけでよい(Weightは指定不要) セル範囲.Borders.LineStyle = xlDouble ' 二重線 セル範囲.Borders.LineStyle = xlDot ' 点線 セル範囲.Borders.LineStyle = xlDashDotDot ' 破線1 セル範囲.Borders.LineStyle = xlDashDot ' 破線2 セル範囲.Borders.LineStyle = xlDash ' 破線3
通常はWeightだけでよく、二重線はLineStyleだけでいい
とわかるとかなり簡単なのでいいですね。
ただし、すでに罫線が設定されている場合は、
その設定がそのまま使われてしまいます。
罫線を引き直す場合は、いらぬ不具合を生まぬよう、
LineStyleとWeightをどちらも指定するコードを書いておきましょう。
最後に、罫線を引くにはBordersプロパティを用いる以外に、
BorderAroundメソッドを使用する方法もあります。
こちらは「上下左右の外周」を一括で設定できるメソッドで、
以下のようなコードで実行します。
' セル範囲の外周だけに罫線を設定する セル範囲.Borders(xlEdgeTop).Weight = xlThin セル範囲.Borders(xlEdgeBottom).Weight = xlThin セル範囲.Borders(xlEdgeLeft).Weight = xlThin セル範囲.Borders(xlEdgeRight).Weight = xlThin ' ↓外周であれば短縮コードで実行可能 セル範囲.BorderAround xlContinuous ' セル範囲の外周に赤い太線を設定する セル範囲.BorderAround xlContinuous, xlMedium, Color:=RGB(255, 0, 0)
プロパティではなくメソッドっですので、
引数の指定が「=」ではなくなる点にご注意ください。