VBAで罫線を引く処理を完全自動化【 コピペ用サンプルVBA掲載 】

疑問がある人
こんな要望にお応えします。
この記事では、罫線を引くための基本的なVBAから一覧表の行や列が増減しても自動的に罫線の表示位置を調整することができるVBAを詳しくご紹介。
しかもコピペしてる使えるサンプルVBAを掲載しているので、罫線を引く範囲の指定方法さえ理解すれば深く意味を理解しなくてもVBAを使って罫線を自動的に引くことができるようになります。
- 罫線を引く処理を完全自動化できる
- 一度設定してしまえばずっと使える
- 記事内のサンプルVBAを使えば、深い理解は必要なし
一覧表を編集する際、下記のような経験をしたことがある方が多いのではないでしょうか。
罫線の修正忘れはよくあることですが、しょうがないで済むことではありません。
私は、「資料をプリントアウトしたあとに罫線の修正忘れに気づく」という失敗を何度もしてきたので、罫線を引く処理は完全自動化してしまうことを強くおすすめしています。
VBAを使えば、ぐちゃぐちゃになった罫線を一瞬で見た目のキレイな一覧表に修正することが可能なので是非使い方をマスターしましょう。
目次
「VBAで罫線を引く」とは?
あ

疑問がある人
「VBAで罫線を引く」とは、罫線を引くVBA設定したマクロを実行するだけでどれだけ複雑な罫線でも一瞬で引くことができるということです。
下記の動画では、VBAで罫線を引く動作を紹介しています。

ひらめく人
VBAを自由自在に扱えるようになれば、以下のような作業まで自動化することができます。
- 外枠は太い線で引く
- 項目ごとに点線を引く
- タイトルは二重線で引く
- 罫線の色を選択する
罫線の種類や太さを操作するのは意外と手間と時間がかかる作業ですが、VBAを使えば一瞬で作業終了です。
動画で紹介している「罫線を引くVBA」が設定されたエクセルファイルを下記のサイトでダウンロードすることが可能です。
- 罫線を引くマクロをすぐに利用できる
- VBAを設定する時間の短縮ができる
- 設定されているVBAを改修して、業務内容にアレンジできる
上記のようなメリットがあるので、罫線を引く作業を自動化したい!と考えている方におすすめです。

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

ひらめく人
罫線を引くVBAの導入方法
画像を使って、「VBA記入の方法」「コピペして使えるサンプルVBA」「設定したVBAの実行方法」を解説しているので、VBA初心者の方でも簡単に導入できるかと思います。
以下3つのサンプル事例を使って罫線を引くVBAの導入方法を解説していきます。
-
- 列や行が増減しても罫線を引く範囲を自動的に調整するVBA
- 表の始まりをセルで指定して罫線を引く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
仕事では、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」です。
サンプル事例として上図のような一覧に罫線を引いていきます。「日付」というテキストが一覧表の始まりで、終わりは自動的に調整する!という内容の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の勉強を始めようと考えている方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません