Excel。VBA。分類が変わったら区切りの罫線を自動的に描くには
<Excel VBA>
会議資料はやっぱり見やすいものをリクエストされるわけです。
罫線の太さをカテゴリーの境目で変える『区切り線』にすれば、たしかに見やすくなるのですが、設定箇所が多いと、ただただ、「面倒」なわけです。
さらに、資料を作るたびに、「この間の資料よかったから、また同じようにお願い」なんて簡単にいわれたら…
そこで、Excel VBAでマクロを作っちゃいましょう。
例えば、次のような罫線が設定された表を作りたいわけです。
地域の境目で罫線の太さが変わっている『区切り線』。
そして、外枠も太くなっています。
このように罫線を描くためのExcel VBAのプログラム文を確認してみましょう。
Sub 自動区切り罫線()
Dim i As Integer
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
Range("a1").CurrentRegion.Borders.LineStyle = xlContinuous
Range("a1").CurrentRegion.BorderAround , xlThick
For i = 2 To lastrow
If Range("b" & i).Value <> Range("b" & i - 1).Value Then
Range("a" & i).Resize(1, 4).Borders(xlEdgeTop).Weight = xlThick
End If
Next i
End Sub
思った以上に少ない行数で作ることができます。
罫線がない表を用意して、実行しています。
このExcel VBAを実行してみると、ちゃんと罫線が描いてくれることが確認できます。
では、Excel VBAのプログラム文を確認しておきましょう。
お馴染みの変数宣言ですね。
Dim i As Integer
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
lastrowは、その表の最終行の行数を代入させています。
この回数分繰り返せば、必要な行数だけ繰り返し実行することができます。
Range("a1").CurrentRegion.Borders.LineStyle = xlContinuous
A1からのCurrentRegion。
つまり、表全体にたいして、Borders.LineStyleが格子罫線で、xlContinuousが線種を実線で描く。
この一行で、表全体を格子の実線を設定するという意味の行です。
つまり、シンプルな格子罫線を設定するだけならば、この一行を入れるだけでOKなわけです。
Range("a1").CurrentRegion.BorderAround , xlThick
こちらは、BorderAroundが外周でxlThickが太。
つまり、表の外周を「太い外枠」を設定しているわけです。
区切り線しなくても、この2行のマクロを設定するだけで、太い外枠の格子罫線の表を設定することが出来るわけです。
ただ、注意点があって、Excel罫線の設定する順番のルールは、Excel VBAでも同じです。
先に「太い外枠」を設定してから、「格子」を設定すると、先に設定した「太い外枠」は当然、「格子」に変わってしまいます。
太さは変更することができます。
xlThickは「太線」ですが、それ以外に、xlMediumが「中太線」。
xlThinが「細線」。
xlHairlineが「極細」と用意されています。
For i = 2 To lastrow
If Range("b" & i).Value <> Range("b" & i - 1).Value Then
Range("a" & i).Resize(1, 4).Borders(xlEdgeTop).Weight = xlThick
End If
Next i
For To Next文で、区切り線を設定しています。
For i = 2 To lastrow
表の最終行までを繰り返します。
If Range("b" & i).Value <> Range("b" & i - 1).Value Then
区切り線の条件はB列なので、今のB列のセルとその上のB列のセルの内容を比較します。
「<>(等しくない)」ならば、下記を実行するというIf~End If文です。
Range("a" & i).Resize(1, 4).Borders(xlEdgeTop).Weight = xlThick
Range("a" & i).Resize(1, 4)は、A列からResize(1, 4)で4列といういみで、A列からD列までが対象という意味で、Borders(xlEdgeTop)は、セル範囲の上側に罫線を設定します。
どのような線なのかが、Weight = xlThick。
すなわち、「太線」ということで、この一行は、A:Dの上側に太線を設定するという意味のプログラム文です。
このように、あまり長くないExcel VBAのプログラム文で、面倒な作業を済ませることができますので、少しずつ、現場でExcel VBAを使ってみるといいかもしれませんね。