第35回.セルの書式(罫線,Border)
マクロVBAで罫線を引く必要が出てくる場合は結構あるものです。
新規シートにデータを出力した場合やデータ範囲がマクロで変更されてしまう場合、罫線を引き直す事が必要になってきます。
そして、マクロの記録を使用して作成したVBAコードをそのまま使っている最悪のケースも散見されます。
A1セル~B5セルに格子線を引いた時のマクロの記録
Sub
Macro1()
Range("A1:B5").Select
Selection.Borders(xlDiagonalDown).LineStyle
= xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With
Selection.Borders(xlEdgeLeft)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex
= xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End
With
With Selection.Borders(xlEdgeBottom)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlEdgeRight)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlInsideVertical)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlInsideHorizontal)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
End Sub
うんざりするほど長いマクロです。
しかし、これは、
以下のマクロで済んでしまいます。
Sub Macro2()
Range("A1:B5").Borders.LineStyle = xlContinuous
End
Sub
マクロを多少なりとも扱うなら、
少なくとも、マクロの記録で作成されたマクロをそのまま使うような事だけはしないで下さい。
以下でマクロVBAでの罫線について解説します。
マクロVBAでの罫線指定
Bordersコレクションは、Borderオブシェクトの集まりです。
(コレクションについての詳細は後々)
つまり、
RangeのBordersプロパティで、Bordersコレクション内のBorderオブジェクトを扱うということです。
または、
Range.Borders(index).プロパティ = 設定値
| 設定値 | 説明 |
| xlDiagonalDown | 範囲内の各セルの左上隅から右下への罫線 |
| xlDiagonalUp | 範囲内の各セルの左下隅から右上への罫線 |
| xlEdgeBottom | 範囲内の下側の罫線 |
| xlEdgeLeft | 範囲内の左端の罫線 |
| xlEdgeRight | 範囲内の右端の罫線 |
| xlEdgeTop | 範囲内の上側の罫線 |
| xlInsideHorizontal | 範囲外の罫線を除く、範囲内のすべてのセルの水平罫線 |
| xlInsideVertical | 範囲外の罫線を除く、範囲内のすべてのセルの垂直罫線 |
括弧()を省略して、
Range.Borders.プロパティ
とした場合は、
xlEdgeBottom、xlEdgeLeft、xlEdgeRight、xlEdgeTop、xlInsideHorizontal、xlInsideVertical
これら全てに同一の設定をしたことになります。
Bordersのプロパティ
| プロパティ | プロパティの説明 | プロパティの設定値 | 設定値の説明 |
| LineStyle | 罫線の種類 | xlNone または xlLineStyleNone | なし |
| xlContinuous | 実線 | ||
| xlDash | 破線 | ||
| xlDashDot | 一点鎖線 | ||
| xlDashDotDot | ニ点鎖線 | ||
| xlDot | 点線 | ||
| xlDouble | 2 本線 | ||
| xlLineStyleNone | 線なし | ||
| xlSlantDashDot | 斜破線 | ||
| Color | 罫線の色 | RGB値を表す長整数 | |
| ColorIndex | 罫線の色 | 1~56 | 2003までの56色カラーパレットのインデックス 何色か分かりづらいのでColorを使ったほうが良い |
| Weight | 罫線の太さ | xlHairline | 非常に細い線 (最も細い罫線) |
| xlMedium | 普通 | ||
| xlThick | 太線 (最も太い罫線) | ||
| xlThin | 細線 | ||
| TintAndShade | 罫線の色色明るく、または暗く | 2007以降 |
規定値
LineStyleは、xlContinuous
Weightは、xlThin
例えば、xlContinuousだけを指定した場合は、WeightはxlThinになります。
それは、ワークシートの「セルの書式設定」で指定可能な組み合わせしか出来ないからです。

当然の話ではありますが、
マクロは、エクセルの基本操作を十分に理解していないと書けないのです。
Range("セル範囲").Borders(xlEdgeLeft).LineStyle =
xlContinuous
Range("セル範囲").Borders(xlEdgeRight).LineStyle =
xlContinuous
Range("セル範囲").Borders(xlEdgeLeft).Weight =
xlThick
Range("セル範囲").Borders(xlEdgeRight).Weight =
xlThick
上記では、セル範囲の左右に太い実践を引いています。

Range("セル範囲").Borders.LineStyle = xlContinuous
上記では、セル範囲に矩形の細線が引かれます。

Range.BorderAroundメソッド
それが、Range.BorderAroundメソッドです。
これは、外枠に対して一度に罫線を引きます。
こちらは、メソッド(オブジェクトに動作を与える)なので、
以下は名前付き引数で指定した場合の使用例です。
Range("セル範囲").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium,
Color:=vbRed
上記では、
セル範囲の外枠に、実線、太さ普通、赤色の罫線を引いています。

マクロVBAでの罫線の注意点
VBAコードの行数が多いと、結果としてマクロの動作がとても遅くなってしまいますし、読みづらいコードになってしまいます。
それには同じ罫線のセル範囲はまとめて罫線を引くようにします。
例えば以下のように罫線を引きたい時、

Range("セル範囲").Borders.LineStyle = xlContinuous
Range("セル範囲").BorderAround Weight:=xlThick
このようにまとめて罫線を引くことができます。
外枠の罫線は2度引いていることになりますが、
一か所ずつ罫線を引くよりマクロVBAの記述も短く簡潔になりますし、処理速度も若干は速くなります。
同じテーマ「マクロVBA入門」の記事
第32回.セルの書式(配置,Alignment)
第33回.セルの書式(フォント,Font)
第34回.セルの書式(塗りつぶし,Interior)
第35回.セルの書式(罫線,Border)
第36回.総合練習問題4
第37回.ブック・シートの指定
第39回.セルのクリア(Clear,ClearContents)
第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
第41回.セルのコピー&値の貼り付け(PasteSpecial)
第42回.セルをコピーするとは
第43回.総合練習問題5
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
