罫線を引く処理をマクロで記録するとややこしいコードができあがる
そもそも私の記憶力が悪くて悪いのですが、罫線を引くVBAコードを書きたいことが多いにも関わらず思い出せない→マクロの記録でコードの書き方を確認する→マクロの記録で出来上がるコードが長くて読みにくくてわかりにくい→イライラするという悪循環を繰り返していました。
以前にもこちらで罫線を引くExcelVBAコードを紹介したことがありましたが、今回はより便利に簡単に使えるコードを備忘録も兼ねてご紹介します。
そもそも罫線で必要な要素は4つ
私の中で罫線はそんなに凝った作りでなく、以下の4つを指定すれば実行できると考えています。
マクロを記録するとムダな範囲の指定とテーマに沿った色選択・わけのわからない9桁くらいの数字の色指定にうんざりするので、できる限りシンプルで使いまわしやすいコードを想定しています。
スポンサーリンク
罫線を引くExcelVBAコード
罫線を引くコードとして表の中に格子状に線を引くVBAコードと、枠で周囲を囲むコードを使い分けることにしました。
罫線を引く範囲を変数に格納し、変数に格納された範囲で罫線を引くコードです。
Sub 線で囲む(c As Range)
Dim 線の種類
線の種類 = xlContinuous’二重線はxlDouble、点線はxlDot
Dim 色
色 = RGB(200, 200, 200)
Dim 太さ
太さ = xlMedium’細い線はxlThin、二重線はxlThickを指定
With c.Borders(xlEdgeLeft)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
With c.Borders(xlEdgeTop)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
With c.Borders(xlEdgeBottom)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
With c.Borders(xlEdgeRight)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
End Sub
Sub 格子状にする(c As Range)
Dim 線の種類
線の種類 = xlContinuous’点線の場合はxlDot
Dim 色
色 = RGB(200, 200, 200)
Dim 太さ
太さ = xlThin’少し太い線はxlMedium
With c.Borders
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
End Sub
Dim 線の種類
線の種類 = xlContinuous’二重線はxlDouble、点線はxlDot
Dim 色
色 = RGB(200, 200, 200)
Dim 太さ
太さ = xlMedium’細い線はxlThin、二重線はxlThickを指定
With c.Borders(xlEdgeLeft)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
With c.Borders(xlEdgeTop)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
With c.Borders(xlEdgeBottom)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
With c.Borders(xlEdgeRight)
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
End Sub
Sub 格子状にする(c As Range)
Dim 線の種類
線の種類 = xlContinuous’点線の場合はxlDot
Dim 色
色 = RGB(200, 200, 200)
Dim 太さ
太さ = xlThin’少し太い線はxlMedium
With c.Borders
.LineStyle = 線の種類
.Color = 色
.Weight = 太さ
End With
End Sub
格子状に線を引く場合、上下左右をまとめて「.Borders」で罫線を引くことが可能なので、コードが少なくなります。
これらのコードの使い方ですが、下記のような手順で上記のコードを呼び出します。
A1セルを含む表全体に罫線を引くVBAコードです
Sub A1セル含む表に罫線を引く()
Cells.Borders.LineStyle = xlNone ’罫線をすべて消去する
Dim r As Range
Set r = Cells(1, 1).CurrentRegion’A1セルを含む表の範囲を指定
Call 格子状にする(r)
Call 線で囲む(r)
End Sub
Cells.Borders.LineStyle = xlNone ’罫線をすべて消去する
Dim r As Range
Set r = Cells(1, 1).CurrentRegion’A1セルを含む表の範囲を指定
Call 格子状にする(r)
Call 線で囲む(r)
End Sub
私は罫線を引く際、BordersプロパティのTheme.colorやTintAndShadeは設定が面倒なので使っていません。
全部RGBの数値で表すことにしています。
RGBは(0,0,0)で指定すれば黒、(255,255,255)で指定すれば黒になるので、適当に間くらいの色を指定してグレーにしています。
コメント