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

Left Caption

疑問がある人

VBAを使って一覧表の罫線を自動で引きたい。どうやって設定すればいいの?

こんな要望にお応えします。

この記事では、一覧表の行や列が増減しても自動的に罫線の表示位置を調整することができるVBAをご紹介しています。

罫線を引く作業をVBAを使って自動化することでエクセル作業の効率をアップさせることができます。

 

Right Caption

悩んでる人

一覧表の罫線を整えたあとに内容変更が発生。編集完了後また罫線を調整しなければならない。。

エクセル作業では上記のような二度手間を強いられたり、罫線をしっかり引いていないまま作業を完了してしまう!ということがあるかと思います。

罫線を引くVBAを設定してしまえば、どんなに一覧表を編集してもキレイな罫線を自動的に引くことができます。罫線を引くVBAを自由自在に扱えるようになれば、以下のような作業まで自動化することができます。

 

  • 外枠は太い線で引く
  • 項目ごとに点線を引く
  • タイトルは二重線で引く
  • 罫線の色を選択する

 

罫線の種類や太さを操作するのは意外と手間と時間がかかる作業です。罫線を引く作業が多いという方は是非この記事を参考にしてみてください。

 

VBAで罫線を引く方法

VBAを使って罫線を引くのと、手動で罫線を引くのとでは作業効率が大きく異なってきます。下記の動画では、VBAで罫線を引く様子を紹介しています。

 

Left Caption

ひらめく人

一度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
Left Caption

ひらめく人

色の指定には2通りの方法がありますが、使いやすい方を覚えればOKです。

 

罫線を引くVBAの導入方法

罫線を引くVBAの導入方法を詳しくご紹介します。以下3つのサンプル事例を使って罫線を引くVBAの導入方法を解説していきます。

 

    • 表の列や行が増減しても罫線を引く範囲を自動的に調整するVBA
    • 表の始まりをセルで指定して罫線を引くVBA
    • 表の始まりをテキストで検索して罫線を引くVBA

 

Left Caption

ひらめく人

どの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を導入することで以下のようなメリットを得ることができます。

  • メリット作業時間の短縮
  • 罫線を引く作業の忘れ防止
  • 罫線の太さがバラバラになるのを防止
Left Caption

ガッツポーズの人

VBAを使うことで罫線の表示を常に正常に保つことができるので、私の職場ではかなり重宝されています。

仕事では、「罫線を使った予定表の管理」という業務があり、罫線を引くVBAが導入されています。業務内容は下記の動画で詳しくご紹介しています。

予定一覧に記載された「日付」「時刻」「作業内容」の情報から、罫線を引く「位置」「線種」「色」を変えて記入する!という業務内容なのですが、編集内容が複雑なので手作業でやろうとすると必ずといっていいほど入力ミスが発生していました。

罫線を引くVBAを導入してから作業時間の大幅な短縮と罫線の入力ミスの激減という効果を得ることができました。複雑な条件下で罫線を引かなければならない場合、VBAを設定することをおすすめします。

 

VBA初心者の方向けのおすすめ勉強法

罫線を引くVBAのように、VBAには仕事の効率をアップさせることができる機能がいろいろあります。VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。

VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。

【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。

 

  • 基礎からプログラミングを勉強したい
  • まとまった勉強時間の確保が難しい
  • 途中で挫折したくない

上記のように考えている方に【1st Step】はおすすめです。

下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。

 

 

これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。