5/26/2018

Excel。マクロ028。知ると便利な罫線の引き方。【Ruled line】

Excel。マクロ028。知ると便利な罫線の引き方。

<Excel VBA>

Excel VBAを使わずに、マクロの記録(操作記録方式)ではダメなんですかね?
というご質問を受けることがありますが、
比較するのにわかりやすいものの中に、『罫線』があります。

では次の表を使ってマクロ記録で、罫線の格子を引いてみましょう。

開発タブのマクロの記録を実行します。

では、その構文を確認してみると…

なんか、とんでもない行数の構文になってしまっていますよね。

原因は、セルの書式ダイアログボックスを見れば、わかります。

罫線のボタンをごらんください。

上・左・右・下と、水平と垂直の線の6か所の設定をしていますよね。

Excel VBAの構文を見てみると、
上(xlEdgeTop)
左(xlEdgeLeft)
右(xlEdgeRight)
下(xlEdgeBottom)
水平(xlInsaidVertical)
垂直(xlInsaidHorizontal)
の6か所に関して書いていますよね。

しかも、それぞれ
線の種類のLineStyle
色のColorIndex
線の太さのWeight
の各プロパティを設定していますので、構文が長くなってしまったのです。

このように、マクロの記録という操作記録方式では、
不要であっても全部記録してしまうのです。

この点からも、Excel VBAを使って書いてみると、
すごくコンパクトに作ることが出来るのです。

では、今度は、Excel VBAで格子の罫線を引いてみましょう。

さらに、外枠太罫線にしてみましょう。

Sub 罫線()
    Range("a1").CurrentRegion.Borders.LineStyle = xlContinuous
    Range("a1").CurrentRegion.BorderAround Weight:=xlMedium
End Sub

では、実行してみましょう。

格子に外枠太罫線が引けていますね。

マクロの記録では、プログラム文の行数も多かったのに、今回は、2行。
しかも、外枠太罫線にしていて、2行で収まっていますよね。

当然、メンテナンスも楽です。

それでは、このプログラム文の説明をしてみましょう。

Range("a1").CurrentRegion は、お馴染みですね。

A1から接続している範囲を選択する。

つまり、表を選択するという意味ですね。

Borders.LineStyle = xlContinuous は、
格子罫線を設定するという意味ですね。

このBordersコレクションは、右とか左とか指定しないで使うと、
四辺全部という意味になるので、マクロの記録であったような、
上や下などの設定をしなくてもいいので、
この1行だけで、マクロの記録で作ったものと、同じ意味になるわけです。

よって、A1:B21と範囲選択しなくても、
A1からの表に格子罫線を設定することが出来たわけですね。

2行目の、外枠太罫線も確認しておきましょう。

Range("a1").CurrentRegion. は、
A1からの表を選択するという意味でしたね。

BorderAround Weight:=xlMedium のうち、
Weight:=xlMedium は、太罫線という意味です。

そして、BorderAroundですが、四辺ではなくて、
外枠罫線を引くという意味です。

1行目のBordersコレクションを使ってしまうと、
四辺に罫線を設定してしまうので、格子罫線ではなくて、
四辺が太罫線になってしまいますので、
Bordersコレクションは使えませんので、注意が必要ですね。

このように、マクロの記録でもいいのですが、
Excel VBAを知ることで、効率的かつ、
メンテナンスしやすいExcel VBA構文を作ることが出来ますので、
少しずつ慣れていくといいですね。