PR

【VBA】指定セル範囲の罫線(外枠、格子など)を引く

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
集計結果などに対して指定した範囲に簡易的な格子状の罫線を引いたり、太線の外枠で囲いたい場合などがあるかと思いますので、今回はセル罫線のプロパティを利用して格子状罫線や外枠の一例、罫線を消す処理などを書いていこうと思います。

スポンサーリンク

1.サンプル概要

ワークシートSheet1にサンプルとして書いた罫線なしの表を用意しています。元から用意されたフォームに書込むような処理の場合は別ですが、集計結果を元に新しいシートを追加してセルに書き項ような処理をするようなケースではこのような形になることもあるかと思います。

左上端をセルB2にしているのは外枠罫線処理を実行した際に判りやすくする為です。

先ず、簡単に格子状に罫線を引くと以下のようになります。(Sample1)

上の例はアクティブセル領域全体に対しての処理なので、範囲を限定して罫線を引くことも当然ながら可能です。下の例はセルB2からセルG10の範囲を指定して格子状の罫線を引きます。(Sample2)

外枠についても多少処理を工夫することで簡単に対処できます。(Sample3)

後は合わせて内側の罫線指定や項目部分のセル色や文字色設定を行うことで、表らしく見せることもできるかと思います。(Sample4)

以上がサンプル概要になります。

2.サンプルコード

罫線に関するBodersプロパティやLineStyleプロパティについては以前に記事を投稿しているので、ここでは詳細を割愛します。よろしければご参考までに。

【VBA】セルやセル範囲の罫線を設定/取得する
こんにちは、Ryoです。 Excelで扱うことが多い罫線ですが、当然ながらVBAでもセルやセル範囲に対して罫線の設定/取得を行うことが出来ますので、今回は罫線を引く位置や種類の設定について書いていきたいと思います。 1.サンプル概要 今回は...

◆Sample1:アクティブセル領域に格子状罫線

Sub Sample1()

  '指定したセル範囲(アクティブセル領域)に
  '格子状の罫線を引く
  Worksheets("Sheet1").Range("B2").CurrentRegion. _
  Borders.LineStyle = xlContinuous
  
  'xlContinuous : 実線

End Sub

簡単に全体を選択して格子状に罫線を引くような形であれば、この一行でOKです。CurrentRegionプロパティを利用してアクティブセル領域(空白セルで囲まれた領域)を指定しBordersプロパティの定数を省略しているので、格子状に罫線が引かれている状態になります。

◆Sample2:範囲を指定して格子状罫線

Sub Sample2()

  'CurrentRegionを使用せずに範囲指定しても可
  '以下はセルB2からセルG10範囲に格子状罫線を引く
  Worksheets("Sheet1").Range("B2:G10"). _
  Borders.LineStyle = xlContinuous
  
  'xlContinuous : 実線

End Sub

Sample1は自動的に範囲を取得してくれますが、状況によってCurrentRegionプロパティが扱い難いこともあります。そのようなケースでも上の例のように範囲を指定することで対処できます。

◆Sample3:指定範囲に外枠罫線を引く

Sub Sample3()

'***指定範囲に外枠罫線を引く一例***

  Dim i As Integer
  
  'Boprders(7)=範囲内「左端」罫線
  '  値 7 ⇒ 定数:xlEdgeLeft
  'Borders(8)=範囲内「上側」罫線
  '  値 8 ⇒ 定数:xlEdgeTop
  'Borders(9)=範囲内「下側」罫線
  '  値 9 ⇒ 定数:xlEdgeBottom
  'Borders(10)=範囲内「右端」罫線
  '  値 10 ⇒ 定数:xlEdgeRight
  
  For i = 7 To 10
    With Worksheets("Sheet1").Range("B2") _
    .CurrentRegion.Borders(i)
         '「実線」を指定し罫線を指定位置に引く
         .LineStyle = xlContinuous
         '指定位置の罫線の太さを指定
         .Weight = xlMedium
    End With
  Next i

End Sub

外枠を引きたい場合、上下左右の端をそれぞれ指定して実線を引いてから線の太さを指定する必要があります。

それぞれの位置に対する定数の値はコード内コメントに記述した通り、7~10になりますので、それを使用してFor~Nextで繰り返し処理を行えば外枠を引いてくれます。

太さを設定するWeightプロパティの定数で指定しているxlMediumは「普通」ですが、罫線はデフォルトが細線なので実際xlMediumで太くなります。

◆Sample4:罫線やセル色などを用いた表作成の一例

Sub Sample4()

'***罫線やセル色などを用いた表作成の一例***

  Dim i As Integer
  
  With Worksheets("Sheet1").Range("B2").CurrentRegion
     '指定範囲の外枠罫線
     For i = 7 To 10
       .Borders(i).LineStyle = xlContinuous
       .Borders(i).Weight = xlMedium
     Next i
     '範囲内の全てのセルの垂直罫線を破線(範囲外は除く)
     '値 11 ⇒ 定数:xlInsideVertical
     .Borders(11).LineStyle = xlDash
     '範囲内の全てのセルの水平罫線を実線(範囲外は除く)
     '値 12 ⇒ 定数:xlInsideHorizontal
     .Borders(12).LineStyle = xlContinuous
   End With

   With Worksheets("Sheet1").Range("B2:G2")
      '表の項目下部に二重の罫線を引く
      .Borders(9).LineStyle = xlDouble
      '項目部分のセル色をディムグレー、文字色を白にする
      .Interior.Color = RGB(105, 105, 105)
      .Font.Color = RGB(255, 255, 255)
   End With

End Sub

Sample3の外枠とセル範囲内内側の罫線設定を行っています。後は項目部下線の二重線設定、セル色指定、フォント色指定になります。

セル範囲内側の垂直罫線は破線設定、水平罫線は実線設定としていますが、これらの定数詳細は以前の投稿記事に書いてありますので、よろしければご参照ください。

◆Sample5:指定範囲の罫線クリア(参考)

Sub Sample5()

  '指定範囲の罫線クリア(消去)
  Worksheets("Sheet1").Range("B2").CurrentRegion. _
  Borders.LineStyle = xlNone

End Sub

罫線をクリアする場合、Bordersプロパティの引数を省略して指定セル範囲の全ての罫線を対象としてからLineStyleプロパティにxlNoneを指定することで罫線を消去することができます。

3.まとめ

集計などの結果を簡易的に見やすくする上で罫線を利用することは多いので、そのようなケースで今回のような罫線処理を覚えておくと簡単に処理できますから有用なことも多いかと思います。



事前にフォームを準備しておくよりも結果に応じて罫線の処理を行った方が結果的に都合がよいこともありますので、何か機会があれば活用をご検討くださいませ。

以上、指定セル範囲の罫線(外枠、格子など)を引く方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました