VBAを使って罫線を引く方法【 コピペしてすぐに使えるサンプルVBAを掲載 】

疑問がある人
こんな要望にお応えします。
この記事では、一覧表の行や列が増減しても自動的に罫線の表示位置を調整することができるVBAをご紹介しています。
罫線を引く作業をVBAを使って自動化することでエクセル作業の効率をアップさせることができます。

悩んでる人
エクセル作業では上記のような二度手間を強いられたり、罫線をしっかり引いていないまま作業を完了してしまう!ということがあるかと思います。
罫線を引くVBAを設定してしまえば、どんなに一覧表を編集してもキレイな罫線を自動的に引くことができます。罫線を引くVBAを自由自在に扱えるようになれば、以下のような作業まで自動化することができます。
- 外枠は太い線で引く
- 項目ごとに点線を引く
- タイトルは二重線で引く
- 罫線の色を選択する
罫線の種類や太さを操作するのは意外と手間と時間がかかる作業です。罫線を引く作業が多いという方は是非この記事を参考にしてみてください。
目次
VBAで罫線を引く方法
VBAを使って罫線を引くのと、手動で罫線を引くのとでは作業効率が大きく異なってきます。下記の動画では、VBAで罫線を引く様子を紹介しています。

ひらめく人
VBAを使って罫線を引くには、「.Bodersプロパティ」を使用します。
罫線を引く範囲を指定する方法としては、Range.Borders または Cells.Bordersどちらでも作成可能です。
「.Bodersプロパティ」の後に「罫線の種類」や「罫線の太さ」を指定することで複数種類の罫線を組み合わせることができます。一つ一つの要素を詳しくご説明していきます。
罫線を引く位置の指定をするVBA
罫線を引く範囲を指定したあと、範囲の左辺の罫線を引くのか、範囲の右辺の罫線を引くのか、を細かく指定しなければなりません。罫線を引く位置を指定するVBAついては下記の基本構造を参考にしてください。
基本構造
Range.Borders( 罫線の位置 ) .LineStyle = 罫線の種類
罫線の位置 | 罫線の位置 |
xlEdgeTop | 上辺 |
xlEdgeBottom | 下辺 |
xlEdgeRight | 右辺 |
xlEdgeLeft | 左辺 |
xlInsideVertical | 内側の垂直線 |
xlInsideHorizontal | 内側の水平線 |
xlDiagonalUp | 右上がり線 |
xlDiagonalDown | 右下がり線 |
基本構造の「罫線の位置」の部分に上記一覧表の値をいれることで、罫線を引く位置を指定することができます。なお、「Range.Borders .LineStyle = 罫線の種類」のように罫線の位置を指定しない場合は上下左右に罫線が引かれます。
罫線の種類を指定するVBA
罫線には実線や点線などの種類が豊富にあります。VBAを使って罫線を引く場合、この線種を指定しなければなりません。線種を指定するVBAついては下記の基本構造を参考にしてください。
基本構造
Range.Borders( 罫線の位置 ) .LineStyle = 罫線の種類
罫線の種類 | 罫線の種類 |
xlContinuous | 実線 |
xlDash | 破線 |
xlDashDot | 一点鎖線 |
xlDashDotDot | 二点鎖線 |
xlDot | 点線 |
xlDouble | 二重線 |
xlSlantDashDot | 斜め斜線 |
xlLineStyleNone | なし |
基本構造の「罫線の種類」の部分に上記一覧表の値をいれることで、線種を指定することができます。
罫線の太さを指定するVBA
罫線には「極細」や「太い」といった線の太さを指定することができます。VBAを使って罫線を引く場合、この線の太さを指定することで見やすい表を作成することが可能になります。線の太さを指定するVBAついては下記の基本構造を参考にしてください。
基本構造
Range.Borders( 罫線の位置 ) .Weight = 罫線の太さ
xlHairline | 極細 |
xlThin | 細い |
xlMedium | 中 |
xlThick | 太い |
「LineStyle」ではなく「Weight」になるので注意が必要です。
罫線の色を変えるVBA
罫線は「黒」以外にも「赤」や「青」といった色を指定することができます。色の指定はしなかった場合、罫線の色は「黒」に統一されるので注意が必要です。罫線の色を指定するVBAついては下記の基本構造を参考にしてください。
基本構造
Range.Border( 罫線の位置 ).color = RGB( 0 , 0 , 0 )
もしくは
Range.Border( 罫線の位置 ).color = 色の定数
黒 | vbBlack |
白 | vbWhite |
赤 | vbRed |
青 | vbBlue |
緑 | vbGreen |
黄 | vbTellow |

ひらめく人
罫線を引くVBAの導入方法
罫線を引くVBAの導入方法を詳しくご紹介します。以下3つのサンプル事例を使って罫線を引くVBAの導入方法を解説していきます。
-
- 表の列や行が増減しても罫線を引く範囲を自動的に調整するVBA
- 表の始まりをセルで指定して罫線を引くVBA
- 表の始まりをテキストで検索して罫線を引くVBA

ひらめく人
表の列や行が増減しても罫線を引く範囲を自動的に調整するVBA
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub テスト() |
2 | g = Cells(Rows.Count, 1).End(xlUp).Row |
3 | r = Cells(1, Columns.Count).End(xlToLeft).Column |
4 | Range(Cells(1, 1), Cells(g, r)).Borders.LineStyle = xlContinuous |
5 | Range(Cells(1, 1), Cells(g, r)).Borders.Weight = xlThick |
6 | Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).LineStyle = xlContinuous |
7 | Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).Weight = xlThin |
8 | Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).LineStyle = xlContinuous |
9 | Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).Weight = xlThin |
10 | End Sub |
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「テスト」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
A1セルから作成された表の罫線を自動的に引くことができました。
表の始まりをセルで指定して罫線を引くVBA
サンプル事例として上図のような一覧に罫線を引いていきます。一覧表の始まりをB4セルと指定し、一覧表の終わりは自動的に調整する!という内容のVBAを作成してみます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub サンプル2() |
2 | retu = Cells(4, Columns.Count).End(xlToLeft).Column |
3 | gyo = Cells(Rows.Count, 2).End(xlUp).Row |
4 | "罫線をリセット" |
5 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlDiagonalDown).LineStyle = xlNone |
6 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlDiagonalUp).LineStyle = xlNone |
7 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeLeft).LineStyle = xlNone |
8 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeTop).LineStyle = xlNone |
9 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeBottom).LineStyle = xlNone |
10 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeRight).LineStyle = xlNone |
11 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlInsideVertical).LineStyle = xlNone |
12 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlInsideHorizontal).LineStyle = xlNone |
13 | "表の罫線を引く" |
14 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeTop).LineStyle = xlContinuous |
15 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeTop).Weight = xlMedium |
16 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeLeft).LineStyle = xlContinuous |
17 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeLeft).Weight = xlMedium |
18 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeRight).LineStyle = xlContinuous |
19 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeRight).Weight = xlMedium |
20 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeBottom).LineStyle = xlContinuous |
21 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlEdgeBottom).Weight = xlMedium |
22 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlInsideVertical).LineStyle = xlContinuous |
23 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlInsideVertical).Weight = xlThin |
24 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlInsideHorizontal).LineStyle = xlContinuous |
25 | Range(Cells(4, 2), Cells(gyo, retu)).Borders(xlInsideHorizontal).Weight = xlThin |
26 | End Sub |
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「サンプル2」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
B4セルから始まる一覧表に罫線を自動的に引くことができました。
表の始まりをテキストで検索して罫線を引くVBA
サンプル事例として上図のような一覧に罫線を引いていきます。「日付」というテキストから一覧表の始まりを指定し、一覧表の終わりは自動的に調整する!という内容のVBAを作成してみます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub サンプル3() |
2 | Dim dater, dateg As Long |
3 | Dim txt1 As String |
4 | """表のはじまりのテキストを入力""" |
5 | txt1 = “日付" |
6 | """検索したテキストが見つからない場合VBAを終了""" |
7 | Dim Rng11 As String |
8 | Rng11 = txt1 & “見当たりません。" |
9 | Set Rng1 = Cells.Find(What:=txt1) |
10 | If Rng1 Is Nothing Then |
11 | MsgBox Rng11 |
12 | Exit Sub |
13 | Else |
14 | End If |
15 | dater = Cells.Find(What:=txt1).Column |
16 | dateg = Cells.Find(What:=txt1).Row |
17 | retu = Cells(dateg, Columns.Count).End(xlToLeft).Column |
18 | gyo = Cells(Rows.Count, dater).End(xlUp).Row |
19 | |
20 | "罫線をリセット" |
21 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlDiagonalDown).LineStyle = xlNone |
22 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlDiagonalUp).LineStyle = xlNone |
23 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeLeft).LineStyle = xlNone |
24 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeTop).LineStyle = xlNone |
25 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeBottom).LineStyle = xlNone |
26 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeRight).LineStyle = xlNone |
27 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlInsideVertical).LineStyle = xlNone |
28 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlInsideHorizontal).LineStyle = xlNone |
29 | "表の罫線を引く" |
30 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeTop).LineStyle = xlContinuous |
31 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeTop).Weight = xlMedium |
32 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeLeft).LineStyle = xlContinuous |
33 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeLeft).Weight = xlMedium |
34 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeRight).LineStyle = xlContinuous |
35 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeRight).Weight = xlMedium |
36 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeBottom).LineStyle = xlContinuous |
37 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlEdgeBottom).Weight = xlMedium |
38 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlInsideVertical).LineStyle = xlContinuous |
39 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlInsideVertical).Weight = xlThin |
40 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlInsideHorizontal).LineStyle = xlContinuous |
41 | Range(Cells(dateg, dater), Cells(gyo, retu)).Borders(xlInsideHorizontal).Weight = xlThin |
42 | End Sub |
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「サンプル3」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
「日付」というテキストからはじまる一覧表に罫線を引くことができました。
VBAで罫線を引く処理を自動化することで効率がアップ
罫線を引くVBAを導入することで以下のようなメリットを得ることができます。
- メリット作業時間の短縮
- 罫線を引く作業の忘れ防止
- 罫線の太さがバラバラになるのを防止

ガッツポーズの人
仕事では、「罫線を使った予定表の管理」という業務があり、罫線を引くVBAが導入されています。業務内容は下記の動画で詳しくご紹介しています。
予定一覧に記載された「日付」「時刻」「作業内容」の情報から、罫線を引く「位置」「線種」「色」を変えて記入する!という業務内容なのですが、編集内容が複雑なので手作業でやろうとすると必ずといっていいほど入力ミスが発生していました。
罫線を引くVBAを導入してから作業時間の大幅な短縮と罫線の入力ミスの激減という効果を得ることができました。複雑な条件下で罫線を引かなければならない場合、VBAを設定することをおすすめします。
VBA初心者の方向けのおすすめ勉強法
罫線を引くVBAのように、VBAには仕事の効率をアップさせることができる機能がいろいろあります。VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。
VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。
【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。
- 基礎からプログラミングを勉強したい
- まとまった勉強時間の確保が難しい
- 途中で挫折したくない
上記のように考えている方に【1st Step】はおすすめです。
下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。
これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません