こんにちは、Ryoです。
Excelで扱うことが多い罫線ですが、当然ながらVBAでもセルやセル範囲に対して罫線の設定/取得を行うことが出来ますので、今回は罫線を引く位置や種類の設定について書いていきたいと思います。
1.サンプル概要
今回は主に罫線の設定や種類を指定する内容なので、動作サンプルというほどでもないのですが、構文への指定定数によって変化を表したものです。
◆Bordersプロパティ
先ず最初に構文ですが、セルやセル範囲の罫線を取得/設定するにはBordersプロパティを使用します。
オブジェクト.Borders(罫線を引く場所)
罫線を引く場所の引数は後述の通りです。
また、このBordersプロパティを使用する上で併せて必要になってくるのが、LineStyleプロパティになります。
この画像は、Bordersプロパティの定数別の実行結果を画像で示したものですが、線を書く上でLineStyleプロパティ指定も必要なので、「実線」としています。
画像だと見にくいかもしれませんので、引数に指定する定数を改めて書くと以下です。
表内の「値」は定数に変わって数値指定でもOKということですが、私個人としては後で自分で見てわからなくなるので、なるべく定数で記述するようにしています。
定数 | 値 | 説明 |
xlDiagonalDown | 5 | 範囲内各セル左上隅から右下への罫線 |
xlDiagonalUp | 6 | 範囲内各セル左下隅から右上への罫線 |
xlEdgeBottom | 9 | 範囲内下側の罫線 |
xlEdgeLeft | 7 | 範囲内左端の罫線 |
xlEdgeRight | 10 | 範囲内右端の罫線 |
xlEdgeTop | 8 | 範囲内上側の罫線 |
xlInsideHorizontal | 12 | 範囲外の罫線を除き、範囲内セル全てに水平罫線 |
xlInsideVertical | 11 | 範囲外の罫線を除き、範囲内セル全てに垂直罫線 |
◆LineStyleプロパティ
LineStyleプロパティは罫線の種類を指定するもので、構文としては以下になります。
オブジェクト.LineStyle = 罫線種類(指定定数)
これらを組み合わせて罫線を指定するので、記述例としてはこうなります。
Cells(6, 8).Borders(xlDiagonalDown).LineStyle = xlContinuous
指定する定数と実際の罫線については以下のようになります。
こちらも画像だとわかりにくいかもしれませんので、改めて定数を書きます。
定数 | 値 | 説明 |
xlContinuous | 1 | 実線 |
xlDash | -4115 | 破線 |
xlDashDot | 4 | 一点鎖線 |
xlDashDotDot | 5 | 二点鎖線 |
xlDot | -4118 | 点線 |
xlDouble | -4119 | 2本線 |
xlLineStyleNone | -4058 | 線なし |
xlSlantDashDot | 13 | 斜め破線 |
これらを組み合わせてセルやセル範囲に罫線を設定します。
2.サンプルコード
◆Sample1
これはBordersプロパティの説明で使用した画像の罫線部分になります。
画像内の黄色塗りつぶしは、サンプルコードで指定したセル範囲を示しています。
Sub Sample1() '左上隅から右下への罫線 Cells(6, 8).Borders(xlDiagonalDown).LineStyle = xlContinuous '左下隅から右上への罫線 Cells(8, 8).Borders(xlDiagonalUp).LineStyle = xlContinuous '範囲内下側の罫線 Cells(10, 8).Borders(xlEdgeBottom).LineStyle = xlContinuous '範囲内左端の罫線 Cells(12, 8).Borders(xlEdgeLeft).LineStyle = xlContinuous '範囲内右端の罫線 Cells(14, 8).Borders(xlEdgeRight).LineStyle = xlContinuous '範囲内上側の罫線 Cells(17, 8).Borders(xlEdgeTop).LineStyle = xlContinuous '範囲内全てに水平罫線(範囲外除く) Range(Cells(19, 8), Cells(21, 10)).Borders(xlInsideHorizontal) _ .LineStyle = xlContinuous '範囲内全てに垂直罫線(範囲外除く) Range(Cells(23, 8), Cells(23, 10)).Borders(xlInsideVertical) _ .LineStyle = xlContinuous
この通り、セルやセル範囲に対してBordersプロパティとLineStyleプロパティで指定しているのみですから、特に難しいこともないですね。
◆Sample2
こちらはLineStyleプロパティの説明で使用した画像の罫線部分です。
Sub Sample2() '実線 Cells(4, 5).Borders(xlDiagonalUp).LineStyle = xlContinuous '破線 Cells(5, 5).Borders(xlDiagonalUp).LineStyle = xlDash '一点鎖線 Cells(6, 5).Borders(xlDiagonalUp).LineStyle = xlDashDot '二点鎖線 Cells(7, 5).Borders(xlDiagonalUp).LineStyle = xlDashDotDot '点線 Cells(8, 5).Borders(xlDiagonalUp).LineStyle = xlDot '2本線 Cells(9, 5).Borders(xlDiagonalUp).LineStyle = xlDouble '斜め破線 Cells(11, 5).Borders(xlDiagonalUp).LineStyle = xlSlantDashDot End Sub
同様に各セルに対してLineStyleプロパティの線種を指定しているのみです。
◆参考
罫線の太さを設定したい場合はWeightプロパティを使います。
オブジェクト.Weight = 線の太さ指定
構文としてはこうなるのですが、知っておいてほしい点としてはLineStyleプロパティとWeightプロパティは同時に指定することが出来ません。
と言うのは、まとめて設定するBorderAroundメソッドというのがありますが同時に指定出来ないことを知っていないと、私のようににやや暫く悩むようになりますので(笑)
なので、太さを設定したい場合は面倒でも記述を分けます。
'左上隅から右下への罫線 With Cells(6, 8).Borders(xlDiagonalDown) .LineStyle = xlContinuous .Weight = xlMedium End With
例として記述したようにWithを使って記述の重複をなくせば、比較的楽に書けると思います。
また、Weightプロパティの指定する定数は以下になります。
xlHairLine・・・細線(最も細い罫線)、値「1」
xlMedium・・・普通の線(濃い線)、値「-4054」
xlThick・・・太線(最も太い罫線)、値「4」
xlThin・・・極細、値「2」
私個人としてはxlMediumで太線という感覚です(笑)
3.まとめ
今回は罫線の設定や線種指定などについてでしたが、この辺りを活用していくとVBAで処理した時の結果に応じて表も柔軟に対処出来る(事前にフォームを作る必要がない)という利点がありますので、知っておいて損はないと思いますから、機会があればご検討くださいませ!
以上、セルやセル範囲の罫線を設定/取得する方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo