9/28/2020

Excel。VBA。分類が変わったら区切りの罫線を自動的に描くには【Ruled line】

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を使ってみるといいかもしれませんね。