Categories: VBA基礎

EXCEL VBA セルの範囲に罫線を引く・データ範囲に罫線を設定(格子罫線・外枠罫線・罫線削除)

 

EXCEL VBA セルの範囲に罫線を引く・データ範囲に罫線を設定(BorderAroundメゾット:格子罫線・外枠罫線・罫線削除)

 

 

●はじめに

EXCELで様々なデータを利用して表を作成すると思います。普段EXCELで罫線を引く事は、そこまで難しい事ではありませんが、VBAプログラムで作成する際は、ビジュアル的に見ないで作成するので、イメージしづらいと思います。ただ、VBAプログラムを利用して罫線を引くプログラムを作成すると、表のサイズ合わせて罫線を引いたり、ある条件を付けて罫線を引くなどプログラミングした条件による判断で罫線を引く事もできます。ここでは、格子罫線と外枠罫線を中心に利用したサンプルプログラムの説明をいたします。

なお、基礎的な罫線を引く方法につきましては、下記を参照してください。

●EXCEL VBA Borders LineStyle Weightの使い方(セルの罫線を引く)

https://akira55.com/borders/

 

 

●書式の説明 (BorderAround:外枠・Borders.LineStyle:格子)

● オブジェクト.BorderAround(LineStyle,Weight,ColorIndex,Color)

①:セル範囲を指定(オブジェクト)
②:罫線の種類(LineStyle)
③:罫線の太さ(Weight)
④:罫線の色を指定(ColorIndex,Color)
※どちらかの引数に色を設定 (ColorIndex又はColor)

● オブジェクト.Borders.LineStyle = 定数

【引数の説明】
①:セル範囲を指定(オブジェクト)
②:罫線の種類(LineStyle)

罫線の種類定数表示結果
細実線LineStyle = xlContinuous
破線LineStyle = xlDash
一点鎖線LineStyle = xlDashDot
二点鎖線LineStyle = xlDashDotDot
点線LineStyle = xlDot
斜め破線LineStyle = xlSlantDashDot
二重線LineStyle = xlDouble
線なし(罫線削除)xlLineStyleNone
罫線の太さ(種類)定数表示結果
極細Weight = xlHairline
Weight = xlThin
Weight = xlMedium
Weight = xlThick
【ColorIndex】

 

 

 

 

指定したセル範囲の周囲に罫線を引く(外枠罫線)

 

 

●プログラム説明 (サンプル①) 【外枠罫線】

下記のサンプルプログラムは、外枠罫線を引くサンプルプログラムです。4つの表がありますので、その表に罫線を4種の罫線を引きます。

 

Sub セル範囲01()  '外枠罫線

    '売上高(1月分)極細線・色1:黒
    Range("B5:C11").BorderAround Weight:=xlHairline, ColorIndex:=1

    '売上高(3月分)細線・色3:赤
    Range("B17:C23").BorderAround Weight:=xlThin, ColorIndex:=3
    
    '売上高(2月分)中線・色4:緑
    Range("F5:G11").BorderAround Weight:=xlMedium, ColorIndex:=4
    
    '売上高(4月分)太線・色5:青
    Range("F17:G23").BorderAround Weight:=xlThick, ColorIndex:=5
    
End Sub

 

●実行前~実行後 ※プログラム実行後、4種類(極細線・細線・中線・太線)の外枠罫線が引かれました。
(画面クリックして拡大)

 

 

 

指定したセル範囲の周囲に罫線を引く(格子罫線)

 

 

●プログラム説明 (サンプル②) 【格子罫線】
下記のサンプルプログラムは、格子罫線を引くサンプルプログラムです。4つの表がありますので、その表に罫線を4種の罫線を引きます。

 

 

Sub セル範囲02()   '格子罫線
    
    '売上高(1月分)細実線
    Range("B5:C11").Borders.LineStyle = xlContinuous
    
    '売上高(3月分)破線
    Range("B17:C23").Borders.LineStyle = xlDash
    
    '売上高(2月分)一点鎖線
    Range("F5:G11").Borders.LineStyle = xlDashDot
    
    '売上高(4月分)斜め破線
    Range("F17:G23").Borders.LineStyle = xlSlantDashDot

End Sub

 

●実行前~実行後 ※プログラム実行後、4種類(細実線・破線・一点鎖線・斜め破線)の格子罫線が引かれました。
(画面クリックして拡大)

 

 

表の大きさに応じて罫線を引く(外枠罫線・格子罫線)

 

 

●プログラムの説明 サンプル③

下記のサンプルプログラムは、表の大きさ(範囲)を把握して、その表の先頭行と最終行を把握します。表の全体は、「格子罫線」を引きます。外枠は、「中線」を引きます。先頭行は、「斜め破」を引きます。最終行は、「二重線」を引きます。表の大きさを把握して指定した箇所に罫線を自動に引くサンプルプログラムです。

 

Sub セル範囲03() '外枠罫線・格子罫線

    Dim lRow, mRow As Long
    Dim Hani, Sentou, Saisyuu As String
    
    Hani = Range("B5").CurrentRegion.Address(False, False)  'セルB5から始まる表の範囲を取得
    
    Sentou = Range("B5").CurrentRegion.Rows(1).Address(False, False)  'セルB5から始まる表の先頭行を取得
    
    Saisyuu = Range("B5").CurrentRegion.Rows(Range("B5").CurrentRegion.Rows.Count).Address(False, False) 'セルB5から始まる最終行を取得

    
    Range(Hani).Borders.LineStyle = xlContinuous  '格子罫線を作成:細実線
    Range(Hani).BorderAround Weight:=xlMedium, ColorIndex:=1 '外枠を作成する:中線・色1:黒
    Range(Sentou).Borders(xlEdgeBottom).LineStyle = xlSlantDashDot  '先頭行:斜め破線・罫線位置下
    Range(Saisyuu).Borders(xlEdgeTop).LineStyle = xlDouble '最終行(合計):二重線・罫線位置上
  
End Sub


 

 

●実行前~実行後 ※プログラム実行後、表の大きさを判断して表全体には、格子罫線・外枠罫線が引かれます。先頭行には、斜め破線・最終行には、二重線が引かれました。このプログラムは、セルB5を軸に罫線を作成するように出来ています。列や行が増減しても同じ条件で罫線が引けるように作成しています。
(画面クリックして拡大)

 

 

複数の表に対して罫線を引く(自動的に大きさを判断し罫線を引く)

 

 

●プログラムの説明 サンプル④

下記のサンプルプログラムは、サンプルプログラム③の応用プログラムです。同じシート内に、複数の表がある時に、順番に指定した表に対して罫線を引くプログラムです。プログラム内に、表の位置(セル番号)を設定する事で、表の大きさも自動的に判断して、同じフォーマットで罫線を引く事ができるサンプルプログラムです。

 

Sub セル範囲04()  '外枠罫線・格子罫線・複数表に対して線を引く

    Dim Hyou(2) As String
    Dim lRow, mRow, I As Long
    Dim Hani, Sentou, Saisyuu As String

    Hyou(0) = "B5"   '上期営業売上一覧表 (セル位置)
    Hyou(1) = "B23"  '役職別支給一覧表 (セル位置)
    Hyou(2) = "I22"  '支給合計表 (セル位置)
    
    
    For I = 0 To 2  '配列で設定した表のセル位置順番に繰り返す
    
        Hani = Range(Hyou(I)).CurrentRegion.Address(False, False)  'セルB5から始まる表の範囲を取得
        
        Sentou = Range(Hyou(I)).CurrentRegion.Rows(1).Address(False, False)  'セルB5から始まる表の先頭行を取得
        
        Saisyuu = Range(Hyou(I)).CurrentRegion.Rows(Range(Hyou(I)).CurrentRegion.Rows.Count).Address(False, False) 'セルB5から始まる最終行を取得
    
        
        Range(Hani).Borders.LineStyle = xlContinuous  '格子罫線を作成:細実線
        Range(Hani).BorderAround Weight:=xlMedium, ColorIndex:=1 '外枠を作成する:中線・色1:黒
        Range(Sentou).Borders(xlEdgeBottom).LineStyle = xlSlantDashDot  '先頭行:斜め破線・罫線位置下
        Range(Saisyuu).Borders(xlEdgeTop).LineStyle = xlDouble '最終行(合計):二重線・罫線位置上
      

    Next I

End Sub

 

●実行前~実行後 ※プログラム実行後、シートに3つの表に対して順番に罫線が引かれました。
(画面クリックして拡大)

 

 

シート上の罫線を全て消去する方法 (罫線の削除①)

 

●プログラムの説明 (サンプル⑤)

下記のサンプルプログラムは、シート上にある罫線を全て削除するサンプルプログラムです。全ての罫線を削除する際は、格子・斜め(右上・右下)3種類の罫線を削除する必要があります。それでは、順番に説明いたします。


 

Sub セル範囲_罫線削除①()
  
    With Cells 'Cellsは、シート全体を指定します。
          .Borders.LineStyle = xlLineStyleNone  '罫線を削除(格子罫線)
          .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone  '罫線を削除(右上がり罫線)
          .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone  '罫線を削除(右下がり罫線)
        
    End With

End Sub

 

 

●実行前~実行後 ※プログラム実行後、シート全体に対して罫線の削除を行ったので、3つの表の全ての罫線に全てが削除されました。
(画面クリックして拡大)

 

 

シート上の指定した部分のみ罫線(表)を消去する方法 (罫線の削除②)

 

●プログラムの説明 (サンプル⑥)

下記のサンプルプログラムは、シート上にある指定した罫線(表)を削除するサンプルプログラムです。サンプル⑤では、シート上にある全ての罫線を削除してしまいますが、部分的に消す必要もあると思いますので、部分的に罫線を削除する方法を説明いたします。

 

Sub セル範囲_罫線削除②()
    
    Dim Hani, Sentou, Saisyuu As String

    Hani = Range("B5").CurrentRegion.Address(False, False)  'セルB5から始まる表の範囲を取得

    With Range(Hani)
          .Borders.LineStyle = xlLineStyleNone  '罫線を削除(格子罫線)
          .Borders(xlDiagonalUp).LineStyle = xlLineStyleNone  '罫線を削除(右上がり罫線)
          .Borders(xlDiagonalDown).LineStyle = xlLineStyleNone  '罫線を削除(右下がり罫線)
        
    End With

End Sub

 

●実行前~実行後 ※プログラム実行後、指定したセル(B5)の表のみに対して罫線が削除されました。
(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA