第35回.セルの書式(罫線,Border)
マクロVBAで罫線を引く必要が出てくる場合も度々あります、
シートのデータ範囲がマクロで変更されてしまう場合は、罫線を引き直す事が必要になってきます。
そして、マクロの記録を使用して作成したVBAコードをそのまま使っている最悪のケースも散見されます。
2010以降で、A1セル~B5セルに格子線を引いた時のマクロの記録
Sub
Macro1()
Range("A1:B5").Select
Selection.Borders(xlDiagonalDown).LineStyle
= xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With
Selection.Borders(xlEdgeLeft)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex
= xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End
With
With Selection.Borders(xlEdgeBottom)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlEdgeRight)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlInsideVertical)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
With
Selection.Borders(xlInsideHorizontal)
.LineStyle =
xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade =
0
.Weight = xlThin
End With
End Sub
うんざりするほど長いマクロです。
しかし、これは、
以下のマクロで済んでしまいます。
Sub Macro2()
Range("A1:B5").Borders.LineStyle = xlContinuous
End
Sub
マクロを多少なりとも扱うなら、
少なくとも、マクロの記録で作成されたマクロをそのまま使うような事だけはしないで下さい。
以下でマクロVBAでの罫線について解説します。
マクロVBAでの罫線指定
Bordersコレクションは、Borderオブシェクトの集まりです。
(コレクションについての詳細は後々)
つまり、
RangeのBordersプロパティで、Bordersコレクション内のBorderオブジェクトを扱うということです。
または、
Range.Borders(index).プロパティ = 設定値
xlDiagonalDown | 範囲内の各セルの左上隅から右下への罫線 |
xlDiagonalUp | 範囲内の各セルの左下隅から右上への罫線 |
xlEdgeBottom | 範囲内の下側の罫線 |
xlEdgeLeft | 範囲内の左端の罫線 |
xlEdgeRight | 範囲内の右端の罫線 |
xlEdgeTop | 範囲内の上側の罫線 |
xlInsideHorizontal | 範囲外の罫線を除く、範囲内のすべてのセルの水平罫線 |
xlInsideVertical | 範囲外の罫線を除く、範囲内のすべてのセルの垂直罫線 |
括弧()を省略して、
Range.Borders.プロパティ
とした場合は、
xlEdgeBottom、xlEdgeLeft、xlEdgeRight、xlEdgeTop、xlInsideHorizontal、xlInsideVertical
これら全てに同一の設定をしたことになります。
Bordersのプロパティ
プロパティ | プロパティの説明 | プロパティの設定値 | 設定値の説明 |
LineStyle | 罫線の種類 | xlNone または xlLineStyleNone | なし |
xlContinuous | 実線 | ||
xlDash | 破線 | ||
xlDashDot | 一点鎖線 | ||
xlDashDotDot | ニ点鎖線 | ||
xlDot | 点線 | ||
xlDouble | 2 本線 | ||
xlLineStyleNone | 線なし | ||
xlSlantDashDot | 斜破線 | ||
Color | 罫線の色 | RGB値を表す長整数 | |
ColorIndex | 罫線の色 | 1~56 | 2003までの56色カラーパレットのインデックス 何色か分かりづらいのでColorを使ったほうが良い |
Weight | 罫線の太さ | xlHairline | 非常に細い線 (最も細い罫線) |
xlMedium | 普通 | ||
xlThick | 太線 (最も太い罫線) | ||
xlThin | 細線 | ||
TintAndShade | 罫線の色色明るく、または暗く | 2007以降 |
規定値
LineStyleは、xlContinuous
Weightは、xlThin
例えば、xlContinuousだけを指定した場合は、WeightはxlThinになります。
プロパティの設定値には、組み合わせの制限があります。
それは、ワークシートの「セルの書式設定」で指定可能な組み合わせしか出来ないからです。

当然の話ではありますが、
マクロは、エクセルの基本操作を十分に理解していないと書けないのです。
Range("セル範囲").Borders(xlEdgeLeft).LineStyle =
xlContinuous
Range("セル範囲").Borders(xlEdgeRight).LineStyle =
xlContinuous
Range("セル範囲").Borders(xlEdgeLeft).Weight =
xlThick
Range("セル範囲").Borders(xlEdgeRight).Weight =
xlThick
上記では、セル範囲の左右に太い実践を引いています。

Range("セル範囲").Borders.LineStyle = xlContinuous
上記では、セル範囲に矩形の細線が引かれます。

Range.BorderAroundメソッド
それが、Range.BorderAroundメソッドです。
これは、外枠に対して一度に罫線を引きます。
こちらは、メソッド(オブジェクトに動作を与える)なので、
名前付き引数で指定します。
Range("セル範囲").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium,
Color:=vbRed
上記では、
セル範囲の外枠に、実線、太さ普通、赤色の罫線を引いています。

マクロVBAでの罫線の注意点
VBAコードの行数が多いと、結果としてマクロの動作がとても遅くなってしまいますし、読みづらいコードになってしまいます。
効率的かつ簡潔な罫線の引き方をするように工夫してください。
それには同じ罫線のセル範囲はまとめて罫線を引くようにします。
例えば以下のように罫線を引きたい時、

Range("セル範囲").Borders.LineStyle = xlContinuous
Range("セル範囲").BorderAround Weight:=xlThick
このようにまとめて罫線を引くことができます。
外枠の罫線は2度引いていることになりますが、
一か所ずつ罫線を引くよりマクロVBAの記述も短く簡潔になりますし、処理速度も速くなります。
同じテーマ「マクロVBA入門」の記事
第32回.セルの書式(配置,Alignment)
第33回.セルの書式(フォント,Font)
第34回.セルの書式(塗りつぶし,Interior)
第35回.セルの書式(罫線,Border)
第36回.総合練習問題4
第37回.ブック・シートの指定
第39回.セルのクリア(Clear,ClearContents)
第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
第41回.セルのコピー&値の貼り付け(PasteSpecial)
第42回.セルをコピーするとは
第43回.総合練習問題5
新着記事NEW ・・・新着記事一覧を見る
VBA100本ノック 61本目:「ふりがな」の取得と設定|VBA練習問題(1月6日)
VBA100本ノック 60本目:「株式会社」の表記ゆれ置換|VBA練習問題(1月5日)
VBA100本ノック 59本目:12ヶ月分のシートを四半期で分割|VBA練習問題(1月4日)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(1月3日)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(12月31日)
VBA100本ノック 58本目:番号リストを簡潔にした文字列で返す|VBA練習問題(12月30日)
VBA100本ノック 57本目:ファイルの更新日時|VBA練習問題(12月29日)
VBA100本ノック 56本目:数式内の自身のシート名を消す|VBA練習問題(12月28日)
VBA100本ノック 55本目:他ブックのマクロを起動|VBA練習問題(12月26日)
VBA100本ノック 54本目:シートのChangeイベント|VBA練習問題(12月25日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.繰り返し処理(Do Loop)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。