第35回.セルの書式(罫線,Border)
マクロVBAで罫線を引く必要が出てくる場合は結構あるものです。
新規シートにデータを出力した場合やデータ範囲がマクロで変更されてしまう場合、罫線を引き直す事が必要になってきます。
そして、マクロの記録を使用して作成したVBAコードをそのまま使っている最悪のケースも散見されます。
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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。