セルに罫線を引くにはどうしたらいいでしょう?いつものようにマクロ記録してみます。次のコードは、セル範囲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 でも代用できます。また、試したところ、True と False でもOKなようです。ということは、格子罫線を操作するのはもっと簡単になります。次のコードは、選択したセル範囲に罫線を引きます。
Sub Sample4() Selection.Borders.LineStyle = True End Sub
引いてある罫線を消したいときは、False を設定します。