和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セルに罫線を引く - Range.Borders

セルに罫線を引く方法を解説します。

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)

プロパティではなくメソッドっですので、
引数の指定が「=」ではなくなる点にご注意ください。