こんにちは!Lenocoです。本日も見てくださりありがとうございます。
今回は前回に引き続き「罫線を自動で引く関数」を作ってみましょう。
前回は引数が2つでしたが、今回は1つで作ってみます。
罫線を自動で引く関数(ちょっと上級者向け)
前回は引数2つ(全体のセル範囲と、タイトルのセル範囲)で罫線をひく関数を作ってみました。今回は「表の左上のセル」のみ引数として渡し、同じように罫線を引く関数を作ってみましょう。
※コードは違いますが、出来上がりは同じです。
コード①(関数)
Sub DrawBorders2(rng As Range)
'全体の罫線、外枠の設定
With rng.CurrentRegion
.Borders.LineStyle = xlContinuous
.BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
End With
'タイトルの枠設定
With Range(rng, rng.End(xlToRight))
.BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
End With
End Sub
コード②(実行)
Sub TestDrawBorders2()
Call DrawBorders2(Range("B2"))
End Sub
コードの説明
DrawBordersに引数を渡して呼び出します。
表の左上のセル(B2)のみ渡します。
関数側で、全体に細い罫線と外側に太い罫線を設定、
タイトルの外側に太い罫線を設定します。
左上のセルから全体の範囲を取得するために、CurrentRegionプロパティを使用します。
(基準セルから、空白行や空白列で囲まれた範囲の有効範囲を取得することができます)
rng.CurrentRegion
また、基準のセル(B2)からEnd(xlToRight)を使うことでタイトルの右端セルを取得することができます。
Rangeで基準セル、右端セルを指定し、タイトルの範囲を取得することができます。
Range(rng, rng.End(xlToRight))
さいごに
こちらの引数1つバージョンですが、
必ず周りが空白セルで囲まれていることが条件となります。
表と隣り合ったセルに入力があると、そこも表の一部とみなされ、
意図しない動きになってしまいます。
また、タイトルに空白セルが無いようご注意ください。
空白セルがあると、基準のセルからEnd(xlToRight)をしたときに
空白セルの手前までがタイトルの範囲だとみなされてしまいます。
上の条件が満たせない場合には、以下の引数2つバージョンでお試しくださいね!
全体の範囲、タイトルの範囲を指定するので問題なく罫線がひけますよ!
Lenoco