【VBA】罫線を一括で引く・消す・種類を変える方法(コピペOK)

VBA
スポンサーリンク

記事ID: 068
タイトル: 【VBA】罫線を一括で引く・消す・種類を変える方法(コピペOK)
カテゴリ: セル操作
一次キーワード: VBA 罫線 引く 消す 種類
想定読者: 毎回手作業で罫線を引いている事務・管理職
検索意図: VBAで罫線を一括で引く・消す・種類を変える方法を知りたい
読者の悩み(1文): 100行超の表に罫線を引いて外枠を太くして…を毎回手作業でやるのが地味にストレス
読了後にできること(1文): VBAで罫線の一括設定・削除・種類変更をコピペで自動化できる
前提条件:
  - Excel版: Excel 2016以降 / Microsoft 365
  - OS: Windows 10/11
  - 保存形式: .xlsm(マクロ有効ブック)
  - 貼り付け場所: 標準モジュール
  - 実行方法: マクロ実行(F5)またはボタン割り当て
更新日: 2026-03-11
スポンサーリンク

この記事でわかること

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(...) で色
  • 実務版: データの最終行を自動取得して、見出し行は太い外枠 + データ部分は格子罫線

関連記事:

次にやりたくなること

関連記事

コメント

タイトルとURLをコピーしました