罫線の設定


BorderオブジェクトとBodersコレクション

セルに罫線を引くにはどうしたらいいでしょう?いつものようにマクロ記録してみます。次のコードは、セル範囲A1:C3に格子罫線を引いた操作を記録したものです。ツールバーの[罫線]ボタンで操作しました。

Sub Macro1()
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
End Sub

思わず目を覆いたくなるボリュームですね(^^; このコードを理解して、自分のやりたい部分だけを抜き出すのは大変です。え~い!それなら、このまま使っちゃえ!・・・って方がほとんどでしょうね。でも、サンデープログラマならともかく、プログラムを作ってお金を稼いでいる職業プログラマが、このようにマクロ記録で生成されたコードを精査しないでそのまま使っているのを見るとガッカリします。さらに、そういう方から「やっぱVBAは遅いな。しょせんマクロだしな」などと言われるとカチンときます。たかが罫線を引くぐらいで上のように冗長なコードを書けば時間もかかります。速度が遅い原因は「VBAだから」ではありません。あなたにスキルがないからです。

閑話休題。セルの罫線は、Rangeオブジェクト内のBorderオブジェクトで表されます。また、セルの罫線は左右、上下、斜め線などに分かれていますので、それらをひっくるめてBordersコレクションとして扱います。つまり、下線など個別の罫線を操作するときは、Borders(~)として特定するわけです。そうして特定した罫線に対して、線を引いたり消したり、線の種類や色を指定します。

まず、各罫線を表す定数からいきましょう。次の図をご覧ください。

こうなってます。たとえば、セルA1の下線は Range("A1").Borders(xlEdgeBottom) と表します。

Borders(~)として特定した罫線に対して、罫線の「種類」「太さ」「色」を設定します。種類は LineStyleプロパティ、太さは Weightプロパティ、色は ColoeIndexプロパティです。

線を引いたり消したりするのはLineStyleプロパティの役目です。LineStyleプロパティには「直線」「破線」「一点鎖線」などを表す定数を指定します。直線を表す定数は xlContinuous で、罫線を引かない定数は xlLineStyleNone です。まずは、この2つを覚えておけばいいでしょう。その他の定数はマクロ記録で調べてください。次のコードは、セルA1の下線を引きます。

Sub Sample1()
    Range("A1").Borders(xlEdgeBottom).LineStyle = xlContinuous
End Sub

太さを決めるWeightプロパティには、「極細」「標準」などを表す定数を指定します。標準は xlMedium ですが、Excelの初期値では細い線 xlThin が設定されています。

色を決めるColorIndexプロパティに指定できる数値は、InteriorオブジェクトのColorIndexに指定する数値を同じです。いくつの数値を指定すると何色になるかは、下記のページをご覧ください。ただし、罫線色の自動は xlAutomatic です。

文字色の設定

罫線を簡単に操作するポイント

さて、ここまで詳解してきましたが、限られた操作でしたらもっと簡単な方法があります。実は、Bordersコレクションは引数を省略すると、格子状罫線全体を返します。たとえば、セル範囲A1:C3に格子罫線を引くマクロは、正式には次のように書きます。

Sub Sample2()
    With Range("A1:C3")
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With
End Sub

面倒くさいですね。これをBordersコレクションの引数省略方式で書くと、

Sub Sample3()
    Range("A1:C3").Borders.LineStyle = xlContinuous
End Sub

これだけです。Sample2とSample3は同じ結果です。ぜひお試しください。

さらに、LinStyleプロパティに設定するxlContinuous(罫線を引く)とxlLineStyleNone(罫線を消す)は、実は数値の 1-4142 でも代用できます。また、試したところ、TrueFalse でもOKなようです。ということは、格子罫線を操作するのはもっと簡単になります。次のコードは、選択したセル範囲に罫線を引きます。

Sub Sample4()
    Selection.Borders.LineStyle = True
End Sub

引いてある罫線を消したいときは、False を設定します。