記事ID: 068
タイトル: 【VBA】罫線を一括で引く・消す・種類を変える方法(コピペOK)
カテゴリ: セル操作
一次キーワード: VBA 罫線 引く 消す 種類
想定読者: 毎回手作業で罫線を引いている事務・管理職
検索意図: VBAで罫線を一括で引く・消す・種類を変える方法を知りたい
読者の悩み(1文): 100行超の表に罫線を引いて外枠を太くして…を毎回手作業でやるのが地味にストレス
読了後にできること(1文): VBAで罫線の一括設定・削除・種類変更をコピペで自動化できる
前提条件:
- Excel版: Excel 2016以降 / Microsoft 365
- OS: Windows 10/11
- 保存形式: .xlsm(マクロ有効ブック)
- 貼り付け場所: 標準モジュール
- 実行方法: マクロ実行(F5)またはボタン割り当て
更新日: 2026-03-11
Contents
この記事でわかること
VBAで罫線を一括で引く・消す・種類を変える方法を、コピペで動くコード付きで解説します。
- 対象:毎回手作業で表の罫線を引いている人
- 所要時間:コピペ → 実行まで3分
完成イメージ
実行前:
| No | 氏名 | 部署 | 売上 |
|---|---|---|---|
| 1 | 田中 | 営業部 | 150,000 |
| 2 | 鈴木 | 開発部 | 80,000 |
| 3 | 佐藤 | 営業部 | 200,000 |
| 4 | 高橋 | 総務部 | 50,000 |
| 5 | 伊藤 | 営業部 | 120,000 |
(罫線なし。データだけが並んでいる状態)
実行後:
┏━━━━┳━━━━┳━━━━┳━━━━━┓ ← 外枠=太い実線(xlMedium)
┃ No ┃ 氏名 ┃ 部署 ┃ 売上 ┃ ← 見出し行
┣━━━━╋────┼────┼───────┨ ← 見出し行の下辺=太い実線
┃ 1 │ 田中 │営業部│ 150,000 ┃
┃──── │────│────│─────── ┃ ← 内側=細い実線(xlThin)
┃ 2 │ 鈴木 │開発部│ 80,000 ┃
┃──── │────│────│─────── ┃
┃ ... │ ... │ ... │ ... ┃
┗━━━━┻━━━━┻━━━━┻━━━━━┛ ← 外枠=太い実線
- 見出し行(1行目)は太い外枠で囲まれる
- データ部分(2行目以降)は格子罫線(細い実線)
- 表全体の外枠は太い実線
さらに実務版では、データの最終行を自動取得して、行数が変わっても罫線が正しく引かれます。
自分も報告書の表に罫線を引くのを毎回手作業でやっていました。100行超のデータに格子罫線を引いて、外枠を太くして、見出し行の下だけ二重線にして…を繰り返すのが地味にストレスでした。しかもデータが増減するたびにまた引き直し。
VBAで罫線を一括設定するようにしてからは、表の整形が一瞬で終わるようになりました。見た目の統一感も出るし、データ量が変わっても自動で対応してくれるので、もう手作業に戻れません。
同じように毎回罫線を手作業で引いている人が、この記事でサクッと自動化できるようになればうれしいです。
基本:格子罫線を一括で引く
まずは最もシンプルな例。指定した範囲に格子罫線(細い実線)を一括で引きます。
Sub 格子罫線を引く()
With Range("A1:D6").Borders
.LineStyle = xlContinuous ' 実線
.Weight = xlThin ' 細い
End With
End Sub
ポイント:
.Bordersに対して直接設定すると、外枠+内側のすべて(6辺)に一括で罫線が引かれますxlContinuousは実線、xlThinは細い線です- 範囲を変えるだけで、どんなサイズの表にも対応できます(例:
Range("A1:F20")のように変更してください)
これが罫線VBAの基本形です。ここから「外枠だけ太くする」「特定の辺だけ変える」とカスタマイズしていきます。
セルの書式変更全般についてはセルの書式を一括変更する方法も参考になります。
外枠だけ太い罫線にする
報告書でよくある「内側は細い線、外枠は太い線」のパターンです。
Sub 外枠だけ太くする()
Dim rng As Range
Set rng = Range("A1:D6")
' --- まず全体に格子罫線(細い実線) ---
With rng.Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
' --- 外枠だけ太くする ---
Dim edge As Variant
For Each edge In Array(xlEdgeTop, xlEdgeBottom, xlEdgeLeft, xlEdgeRight)
With rng.Borders(edge)
.LineStyle = xlContinuous
.Weight = xlMedium ' 中太
End With
Next edge
End Sub
ポイント:
- まず
.Bordersで全体に細い罫線を引き、そのあと外枠の4辺だけ太さを上書きします xlEdgeTop(上)、xlEdgeBottom(下)、xlEdgeLeft(左)、xlEdgeRight(右)が外枠の4辺ですxlMediumは中太の線です。もっと太くしたい場合はxlThickを使います
ショートカット版:
BorderAroundメソッドを使えば外枠を1行で設定できます。
“`vba
Range(“A1:D6”).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
“`
ただし
BorderAroundは外枠だけなので、内側の罫線は別途設定が必要です。
特定の辺だけに罫線を引く(上下左右・内側)
「見出し行の下だけ太い線を引きたい」「内側の縦線だけ引きたい」など、辺を指定して罫線を引く方法です。
Bordersのインデックス定数一覧
| 定数 | 意味 |
|---|---|
xlEdgeTop |
外枠の上辺 |
xlEdgeBottom |
外枠の下辺 |
xlEdgeLeft |
外枠の左辺 |
xlEdgeRight |
外枠の右辺 |
xlInsideHorizontal |
内側の横線 |
xlInsideVertical |
内側の縦線 |
xlDiagonalDown |
左上→右下の斜め線 |
xlDiagonalUp |
左下→右上の斜め線 |
例:見出し行の下だけ太い線を引く
Sub 見出し行の下に太い線()
' 見出し行(1行目)の下辺に太い実線
With Range("A1:D1").Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
End Sub
例:内側の横線だけ引く(縦線なし)
Sub 内側の横線だけ()
' 内側の横線だけ(行の区切り線)
With Range("A1:D6").Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub
xlEdge系(外枠)とxlInside系(内側)の違いを意識するのがコツです。たとえばxlEdgeBottomは範囲の一番下の線だけ、xlInsideHorizontalは範囲内部の横線すべてを指します。
罫線を一括で消す
既存の罫線をすべて消すには、LineStyle = xlNone を設定します。
Sub 罫線を一括で消す()
Range("A1:D6").Borders.LineStyle = xlNone
End Sub
特定の辺だけ消す場合
Sub 内側の罫線だけ消す()
' 内側の横線を消す
Range("A1:D6").Borders(xlInsideHorizontal).LineStyle = xlNone
' 内側の縦線を消す
Range("A1:D6").Borders(xlInsideVertical).LineStyle = xlNone
End Sub
注意:
Cells.Borders.LineStyle = xlNoneとすればシート全体の罫線を消せますが、処理に時間がかかる場合があります。罫線がある範囲だけを対象にするのがおすすめです。
罫線の種類を変える(実線・破線・二重線・色)
LineStyle(線の種類)一覧
| 定数 | 線の種類 |
|---|---|
xlContinuous |
実線 |
xlDash |
破線 |
xlDot |
点線 |
xlDashDot |
一点鎖線 |
xlDashDotDot |
二点鎖線 |
xlDouble |
二重線 |
xlNone |
なし |
例:二重線の外枠 + 破線の内側
Sub 罫線の種類を変える()
Dim rng As Range
Set rng = Range("A1:D6")
' 外枠を二重線
Dim edge As Variant
For Each edge In Array(xlEdgeTop, xlEdgeBottom, xlEdgeLeft, xlEdgeRight)
rng.Borders(edge).LineStyle = xlDouble
Next edge
' 内側を破線(細い)
With rng.Borders(xlInsideHorizontal)
.LineStyle = xlDash
.Weight = xlThin
End With
With rng.Borders(xlInsideVertical)
.LineStyle = xlDash
.Weight = xlThin
End With
End Sub
例:罫線に色をつける
Sub 罫線に色をつける()
Dim rng As Range
Set rng = Range("A1:D6")
' 格子罫線を引いてから色を設定
With rng.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(0, 112, 192) ' 青色
End With
End Sub
重要:
Colorを設定する前にLineStyleを設定してください。罫線がない状態(xlNone)でColorだけ設定しても表示されません。
Weight(線の太さ)一覧
| 定数 | 太さ |
|---|---|
xlHairline |
極細 |
xlThin |
細い |
xlMedium |
中 |
xlThick |
太い |
xlHairline(極細)は画面では見えますが、印刷すると消えることがあります。印刷する表にはxlThin以上を使うのが安全です。印刷設定の詳細は印刷設定の方法を参照してください。
実務版:データ範囲に応じて罫線を自動設定する
※ 実行前にブックを上書き保存しておくと安心です。
※ 結合セルがある場合は罫線の挙動が変わることがあります。事前に結合を解除しておくと安全です。
自分は月次報告書のテンプレートにこの罫線マクロを組み込んでいます。データ量が毎月変わっても、罫線が自動で正しく引かれるので、もう手動で整える必要がありません。見た目の統一感も出て、上司からの印象もよくなりました。
Sub 罫線を自動設定する()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim rngAll As Range
Dim rngHeader As Range
Dim rngData As Range
Set ws = ActiveSheet
' --- データの最終行・最終列を取得 ---
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' データがなければ終了
If lastRow < 2 Then
MsgBox "データがありません。2行目以降にデータを入力してください。", vbExclamation
Exit Sub
End If
Set rngAll = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) ' 表全体
Set rngHeader = ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol)) ' 見出し行
Set rngData = ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, lastCol)) ' データ部分
' --- いったん既存の罫線をクリア ---
' ※ 元の罫線は復元できません
rngAll.Borders.LineStyle = xlNone
' --- データ部分に格子罫線(細い実線) ---
With rngData.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic ' 色は自動(黒)
End With
' --- 表全体の外枠を太い実線にする ---
Dim edge As Variant
For Each edge In Array(xlEdgeTop, xlEdgeBottom, xlEdgeLeft, xlEdgeRight)
With rngAll.Borders(edge)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
Next edge
' --- 見出し行の下辺を太い実線にする ---
With rngHeader.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
MsgBox "罫線を設定しました(" & lastRow - 1 & "行 × " & lastCol & "列)"
End Sub
このコードのポイント:
Cells(Rows.Count, 1).End(xlUp).Rowでデータの最終行を自動取得(最終行取得の詳細)- いったん既存の罫線をクリアしてから新しい罫線を設定するので、前の罫線が残らない
- 見出し行の下辺を太くして、見出しとデータを視覚的に区別
- データ量が10行でも100行でも、同じコードで対応できる
このマクロをボタンに割り当てておけば、データ入力後にワンクリックで罫線が完成します。全シートに一括適用したい場合は、
For Each ws In ThisWorkbook.Worksheetsで各シートをループしてください。
落とし穴
自分も最初にBordersを使ったとき、Borders(xlEdgeTop) と Borders(xlInsideHorizontal) の違いがわからず、外枠だけ太くしたつもりが内側の横線まで太くなってしまいました。.Borders.Weight = xlMedium と一括で設定してしまったのが原因です。「外枠だけ」なら辺を個別に指定しないとダメ、というのに気づくまで結構時間がかかりました。
| # | 症状 | 原因 | 対策 |
|---|---|---|---|
| 1 | 外枠だけ太くしたつもりが内側まで太くなった | .Borders.Weight = xlMedium で一括設定すると外枠+内側すべてに適用される |
外枠は Borders(xlEdgeTop) 等で辺ごとに個別設定する |
| 2 | 罫線を消したのに一部残っている | xlNone を外枠だけに設定し、内側の罫線(xlInsideHorizontal/Vertical)が残っている |
.Borders.LineStyle = xlNone で一括削除する |
| 3 | 1セルだけの範囲に xlInsideHorizontal を設定しても何も起きない |
1セルの範囲には「内側」が存在しないため、設定しても罫線が引かれない | 1セルの場合は xlEdge系(上下左右)のみ使う。または2セル以上の範囲を指定する |
| 4 | 罫線の色をRGBで指定したのに反映されない | LineStyle を設定せずに Color だけ設定している |
先に .LineStyle = xlContinuous 等で線種を設定してから .Color を指定する |
| 5 | xlHairline(極細)の罫線が印刷されない |
xlHairline は画面表示用の極細線で、プリンタによっては印刷されない |
印刷する表には xlThin 以上を使う |
FAQ
Q1. .Borders と .BorderAround の違いは?
.Borders はコレクションで、外枠+内側の全辺にアクセスできます。.BorderAround はメソッドで、外枠だけを1行で設定できます。
' BorderAround: 外枠だけ1行で設定
Range("A1:D6").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
' Borders: 全辺(外枠+内側)に設定
Range("A1:D6").Borders.LineStyle = xlContinuous
内側の罫線が不要で外枠だけ引きたい場合は BorderAround が手軽です。
Q2. セルの4辺すべてに異なる太さを設定するには?
Borders(定数) で辺ごとに個別設定します。
With Range("A1:D6")
.Borders(xlEdgeTop).Weight = xlMedium ' 上: 中太
.Borders(xlEdgeBottom).Weight = xlThick ' 下: 太い
.Borders(xlEdgeLeft).Weight = xlThin ' 左: 細い
.Borders(xlEdgeRight).Weight = xlThin ' 右: 細い
End With
各辺に
.LineStyleも個別に指定できます。例: 上辺だけ二重線にしたい場合は.Borders(xlEdgeTop).LineStyle = xlDouble。
Q3. 罫線の太さは何種類ある?
4種類あります。
| 定数 | 太さ | 用途 |
|---|---|---|
xlHairline |
極細 | 画面表示のみ(印刷で消えることがある) |
xlThin |
細い | 一般的な罫線(最もよく使う) |
xlMedium |
中太 | 外枠や見出し行の区切り |
xlThick |
太い | 強調したい枠 |
Q4. 印刷時に罫線が消える・ずれる場合は?
xlHairline(極細)は印刷で消えることがあります。印刷する表には xlThin 以上を使ってください。また、印刷プレビューで確認してから印刷するのがおすすめです。印刷設定の詳細は印刷設定の方法を参照。
Q5. 全シートの表に同じ罫線を一括で引くには?
For Each で全シートをループします。
Sub 全シートに罫線を引く()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
If lastRow >= 2 Then
With ws.Range("A1:D" & lastRow).Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
End If
Next ws
End Sub
詳しくは複数シートを一括処理する方法を参照してください。
まとめ
この記事では、VBAで罫線を一括で引く・消す・種類を変える方法を解説しました。
- 格子罫線:
Range("A1:D6").Borders.LineStyle = xlContinuousで一括設定 - 外枠だけ太く:
Borders(xlEdgeTop)等で辺ごとに個別設定 - 特定の辺:
xlEdge系(外枠)とxlInside系(内側)を使い分ける - 罫線削除:
.Borders.LineStyle = xlNoneで一括削除 - 種類変更:
xlDash(破線)、xlDouble(二重線)、.Color = RGB(...)で色 - 実務版: データの最終行を自動取得して、見出し行は太い外枠 + データ部分は格子罫線
関連記事:
- セルの書式を一括変更する方法 — 罫線以外のフォント・背景色・配置なども自動化
- 条件付き書式をVBAで設定する方法 — 条件に応じた書式設定の応用
- 印刷設定の方法 — 罫線を整えたら印刷設定もVBAで自動化
次にやりたくなること
- 罫線以外のセル書式(フォント・背景色・配置)もVBAで一括変更したい → セルの書式を一括変更する方法
- 条件に応じて書式を自動で切り替えたい → 条件付き書式をVBAで設定する方法


コメント