Excel VBAで罫線を引く方法をお探しですね。

広告

Excel VBAで罫線を引く・消す方法を初心者向けに解説

Excel VBAで表を自動作成するとき、セルに値を入れるだけでなく罫線まできちんと引いておくと、見た目がぐっと良くなります。

手作業なら「ホーム」タブから罫線を選べばいいのですが、毎回同じ表を作る場合や、行数が変わる表に対応したい場合、不要な罫線をまとめて消したい場合などは、VBAで自動化したほうが断然ラクです。

この記事では、Excel VBAでセルに罫線を引いたり消したりする方法を、初心者の方にも分かりやすく説明していきます。

罫線を引く基本は「Borders」プロパティ

Excel VBAでセルに罫線を引くときの基本は、`Range(“範囲”).Borders(罫線の位置).LineStyle = 罫線の種類`という書き方です。

`Borders`は、セルやセル範囲の罫線を操作するためのプロパティで、上側、下側、左側、右側、それから範囲の内側の縦線・横線なども指定できます。

たとえば、A1セルの上側に実線を引きたいなら、`Range(“A1”).Borders(xlEdgeTop).LineStyle = xlContinuous`と書きます。

よく使う罫線の位置には次のようなものがあります。

– 上側:`xlEdgeTop`
– 下側:`xlEdgeBottom`
– 左側:`xlEdgeLeft`
– 右側:`xlEdgeRight`
– 縦方向の内側罫線:`xlInsideVertical`
– 横方向の内側罫線:`xlInsideHorizontal`

セル範囲全体を表として見やすくしたいときは、外枠だけでなく内側の線も設定する必要があります。

“`vb
Sub DrawBasicBorders()

‘ A1:C3の上側に罫線を引く
Range(“A1:C3”).Borders(xlEdgeTop).LineStyle = xlContinuous

‘ A1:C3の下側に罫線を引く
Range(“A1:C3”).Borders(xlEdgeBottom).LineStyle = xlContinuous

‘ A1:C3の左側に罫線を引く
Range(“A1:C3”).Borders(xlEdgeLeft).LineStyle = xlContinuous

‘ A1:C3の右側に罫線を引く
Range(“A1:C3”).Borders(xlEdgeRight).LineStyle = xlContinuous

End Sub
“`

`Range(“A1:C3”)`のように範囲で指定すると、その範囲全体に対して罫線を操作できます。

一方、`Cells(1, 1)`のように行番号と列番号で指定することもできます。

繰り返し処理で行や列を変えながら罫線を引く場合は、`Cells`のほうが扱いやすいことが多いです。

固定範囲なら`Range`、変動する位置なら`Cells`と覚えておくといいでしょう。

“`vb
Sub DrawBorderByCells()

‘ A1セルの下側に罫線を引く
Cells(1, 1).Borders(xlEdgeBottom).LineStyle = xlContinuous

‘ B2セルの右側に罫線を引く
Cells(2, 2).Borders(xlEdgeRight).LineStyle = xlContinuous

End Sub
“`

外枠・格子状・内側罫線をまとめて引く

表全体の外枠だけに罫線を引きたいときは、上下左右を1つずつ指定してもいいのですが、`BorderAround`メソッドを使うともっと簡単です。

`BorderAround`は、指定したセル範囲の外側だけに罫線を引くメソッドで、表の輪郭をはっきりさせたいときに便利です。

たとえば、`Range(“B2:D5”).BorderAround LineStyle:=xlContinuous`と書くと、B2からD5までの範囲に外枠の実線が引かれます。

“`vb
Sub DrawOuterBorder()

‘ B2:D5の外枠に実線を引く
Range(“B2:D5”).BorderAround LineStyle:=xlContinuous

End Sub
“`

表の中まで格子状に罫線を引きたい場合は、`Borders`の引数を省略して`Range(“B2:D5”).Borders.LineStyle = xlContinuous`と書くのが一番簡単です。

この書き方なら、範囲内の上下左右と内側の罫線がまとめて設定されます。

請求書や一覧表、集計表のように、セルごとの区切りをはっきりさせたいときは、この1行で見やすい表が作れます。

“`vb
Sub DrawGridBorders()

‘ B2:D5に格子状の罫線を引く
Range(“B2:D5”).Borders.LineStyle = xlContinuous

End Sub
“`

外枠は太線、内側は細線にしたい場合は、外側と内側を分けて設定すると、実務っぽい見た目になります。

先に内側の縦線・横線を細い実線にして、その後で外枠の上下左右を太くします。

`With`ステートメントを使うと、同じ範囲を何度も書かなくて済むので、コードが読みやすくなります。

“`vb
Sub DrawTableBorders()

With Range(“B2:D5”)
‘ 内側の罫線
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous

‘ 外枠の罫線
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous

‘ 外枠を太くする
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
End With

End Sub
“`

`Range(“B2:D5”).Borders.LineStyle = xlContinuous`は便利ですが、すべての罫線が同じ見た目になります。

外枠だけ太くしたい、内側だけ点線にしたい、上側だけ赤線にしたいといった細かい調整をする場合は、`xlEdgeTop`や`xlInsideHorizontal`のように罫線の位置を明示して設定するのが確実です。

見た目を統一したいのか、場所ごとに変えたいのかで書き方を選びましょう。

罫線の種類・色・太さを変えて見やすくする

VBAの罫線は、線を引くだけでなく、種類、色、太さも指定できます。

線の種類は`LineStyle`、色は`Color`、太さは`Weight`で設定します。

標準的な実線には`xlContinuous`を使いますが、破線にしたいなら`xlDash`、点線にしたいなら`xlDot`、二重線にしたいなら`xlDouble`を使います。

帳票の合計行だけ二重線にする、注意箇所を赤線にするなど、目的に合わせて使い分けると、表の意味が伝わりやすくなります。

“`vb
Sub SetBorderStyle()

With Range(“B2:D5”)
‘ 全体に実線
.Borders.LineStyle = xlContinuous

‘ 上側を赤い太線にする
.Borders(xlEdgeTop).Color = vbRed
.Borders(xlEdgeTop).Weight = xlThick

‘ 下側を二重線にする
.Borders(xlEdgeBottom).LineStyle = xlDouble
End With

End Sub
“`

`Color`には`vbRed`、`vbBlue`、`vbBlack`などの定数が使えます。

もっと細かい色を指定したいときは、`RGB(255, 0, 0)`のようにRGB関数を使うと好きな色を設定できます。

たとえば、薄いグレーの罫線にしたいなら`RGB(200, 200, 200)`のように指定します。

印刷する帳票では、濃すぎる罫線が読みづらくなることもあるので、画面表示だけでなく印刷時の見え方も意識するといいでしょう。

“`vb
Sub SetBorderColor()

With Range(“B2:D5”).Borders
.LineStyle = xlContinuous
.Color = RGB(180, 180, 180)
.Weight = xlThin
End With

End Sub
“`

罫線の太さには、極細の`xlHairline`、細線の`xlThin`、中太の`xlMedium`、太線の`xlThick`があります。

特に指定しない場合は細線として扱われることが多いので、通常の表なら`xlThin`、見出し行や外枠を強調したいなら`xlMedium`や`xlThick`を使うといいでしょう。

ただし、太線を多用すると表全体が重たく見えるので、強調したい部分だけに限定するのがコツです。

斜め罫線を使う場合は、`xlDiagonalDown`または`xlDiagonalUp`を指定します。

`xlDiagonalDown`はセルの左上から右下へ、`xlDiagonalUp`は左下から右上へ線を引きます。

空欄扱いのセルや、見出しを区切るセルで使われることがありますが、通常の一覧表ではあまり使いません。

必要な場面だけに絞ると、表の見やすさを損なわずに済みます。

罫線・枠線を消す方法と実務での注意点

セルの罫線や枠線を消すには、`LineStyle`に`xlLineStyleNone`または`xlNone`を指定します。

たとえば、A1セルのすべての罫線を消すなら`Range(“A1”).Borders.LineStyle = xlLineStyleNone`と書きます。

セル範囲の罫線をまとめて消したい場合も同じで、`Range(“B2:D5”).Borders.LineStyle = xlLineStyleNone`とすれば、指定範囲内の罫線を一括で削除できます。

“`vb
Sub ClearAllBorders()

‘ B2:D5の罫線をすべて消す
Range(“B2:D5”).Borders.LineStyle = xlLineStyleNone

End Sub
“`

特定の位置だけ消したい場合は、罫線を引くときと同じように`Borders`の引数で場所を指定します。

たとえば、左側だけ消すなら`Borders(xlEdgeLeft)`、内側の横線だけ消すなら`Borders(xlInsideHorizontal)`を指定します。

外枠だけ消して内側の格子線を残したい場合は、上下左右の外枠を個別に消します。

“`vb
Sub ClearOuterBorderOnly()

With Range(“B2:D5”)
.Borders(xlEdgeTop).LineStyle = xlLineStyleNone
.Borders(xlEdgeBottom).LineStyle = xlLineStyleNone
.Borders(xlEdgeLeft).LineStyle = xlLineStyleNone
.Borders(xlEdgeRight).LineStyle = xlLineStyleNone
End With

End Sub
“`

ここで注意したいのは、隣り合うセルの罫線は見た目上共有されるという点です。

たとえば、A1セルの下側の罫線は、A2セルの上側の罫線としても見えます。

そのため、片方のセルだけを操作しているつもりでも、隣接セル側の線が消えたように見えることがあります。

表の一部だけ罫線を消すときは、どの範囲のどの辺を操作しているのかを意識することが大切です。

罫線だけでなく、セルの塗りつぶし、文字色、表示形式などの書式もまとめて消したい場合は、`ClearFormats`メソッドを使います。

ただし、`ClearFormats`は罫線以外の書式も消えるので、「罫線だけ消したい」場面では使いすぎに注意が必要です。

罫線のみを削除するなら`Borders.LineStyle = xlLineStyleNone`、セル全体の書式をリセットするなら`ClearFormats`と使い分けましょう。

“`vb
Sub ClearFormatsSample()

‘ 罫線だけを消す
Range(“B2:D5”).Borders.LineStyle = xlLineStyleNone

‘ 罫線を含む書式全体を消す
Range(“B2:D5”).ClearFormats

End Sub
“`

別のシートのセルに罫線を引いたり消したりする場合は、`Worksheets(“Sheet1”).Range(“A1”)`のようにシート名を明示します。

標準モジュールで単に`Range(“A1”)`と書くと、基本的にはアクティブシートが対象になるため、意図しないシートに罫線を設定してしまう可能性があります。

実務用のマクロでは、対象シートを明示するだけでトラブルを減らせます。

“`vb
Sub SetBorderToAnotherSheet()

With Worksheets(“Sheet1”).Range(“A1:C10”)
.Borders.LineStyle = xlContinuous
End With

End Sub
“`

行数が変わる表に自動で罫線を引く場合は、最終行を取得して範囲を組み立てると便利です。

たとえば、B列を基準に最終行を取得して、B2からE列の最終行まで罫線を引けば、データが増えても表全体を整えられます。

`End(xlUp)`は下から上に向かってデータのあるセルを探す定番の方法で、一覧表の最終行取得によく使われます。

“`vb
Sub DrawBordersToLastRow()

Dim lastRow As Long

‘ B列の最終行を取得
lastRow = Cells(Rows.Count, “B”).End(xlUp).Row

With Range(“B2:E” & lastRow)
.Borders.LineStyle = xlContinuous
.BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
End With

End Sub
“`

まとめ

Excel VBAでセルに罫線を引いたり消したりする方法は、`Borders`、`LineStyle`、`BorderAround`、`Color`、`Weight`を押さえれば基本はほぼカバーできます。

まずは格子状の罫線を引く、外枠だけ太くする、不要な罫線を消すという順番で練習すると理解しやすいです。

さらに、対象シートを明示する、罫線だけ消すのか書式全体を消すのかを区別する、隣接セルとの関係に注意することで、実務でも安定して使えるマクロになります。

ぜひこの記事を参考に、見やすい表作りに挑戦してみてください。

広告