更新日:、 作成日:
VBA セルの罫線を取得する (Range.Borders)
はじめに
Excel VBA マクロでセルの罫線を取得する方法を紹介します。
Range("B1").Borders または Cells(1, 2).Borders プロパティから、セル「B1」の罫線を取得できます。
Border.LineStyle プロパティから、罫線の種類を取得できます。罫線があるか判定もできます。
Border.Color プロパティから、罫線の色を取得できます。
セルの罫線を取得する
Range の引数にセル名を指定すると、そのセルの罫線を取得できます。
セル「A1」の上下左右の罫線を取得するには Range("A1").Borders を入力します。上側の罫線を取得するには Range("A1").Borders(xlEdgeTop) を入力します。
Dim bs As Borders
Set bs = Range("A1").Borders ' 上下左右の罫線
Dim b As Border
Set b = Range("A1").Borders(xlEdgeTop) ' 上側の罫線
Set b = Range("A1").Borders(xlEdgeBottom) ' 下側の罫線
Set b = Range("A1").Borders(xlEdgeLeft) ' 左側の罫線
Set b = Range("A1").Borders(xlEdgeRight) ' 右側の罫線
Cells の引数にセルの行と列の番号を指定すると、そのセルの罫線を取得できます。
行「2」、列「A」の罫線を取得するには Cells(2, 1).Borders を入力します。
Dim bs As Borders
Set bs = Cells(1, 1).Borders ' A1
Set bs = Cells(2, 1).Borders ' A2
Set bs = Cells(1, 2).Borders ' B1
Set bs = Cells(2, 2).Borders ' B2
隣接するセルの罫線は同じものです。セル「A1」の下側に罫線を引くと、セル「A2」の上側に罫線が引かれたことになります。
罫線の種類を取得する
Borders または Border の LineStyle から罫線の種類を取得できます。
Dim bs As Borders
Set bs = Range("B2").Borders ' 上下左右の罫線
Debug.Print(bs.LineStyle)
Dim b As Border
Set b = Range("B2").Borders(xlEdgeTop) ' 上側の罫線
Debug.Print(b.LineStyle)
罫線の種類には次のものがあります。
定数名 | 値 | 説明 | 例 |
xlContinuous | 1 | 実線 | |
xlDash | -4115 | 破線 | |
xlDashDot | 4 | 一点鎖線 | |
xlDashDotDot | 5 | 二点鎖線 | |
xlDot | -4118 | 点線 | |
xlDouble | -4119 | 二重線 | |
xlSlantDashDot | 13 | 斜め斜線 | |
xlLineStyleNone | -4142 | なし |
Borders.LineStyle から取得するときは、上下左右のすべての罫線の種類が同じときだけ値を取得します。違う種類が含まれているときは Null になります。
スポンサーリンク
罫線の色を取得する
Borders または Border の Color から罫線の色を取得できます。
Dim l As Long
l = Range("B2").Borders.Color ' 上下左右の罫線の色
Debug.Print(l)
l = Range("B2").Borders(xlEdgeTop).Color ' 上側の罫線の色
Debug.Print(l)
取得した色は「RGB 関数」と同じ形式の値です。
Borders.Color から取得するときは、上下左右のすべての色が同じときだけ値を取得します。違う色が含まれているときは 0 になります。
罫線の太さを取得する
Borders または Border の Weight から罫線の太さを取得できます。
Dim bs As Borders
Set bs = Range("B2").Borders ' 上下左右の罫線
Debug.Print(bs.Weight)
Dim b As Border
Set b = Range("B2").Borders(xlEdgeTop) ' 上側の罫線
Debug.Print(b.Weight)
罫線の太さには次のものがあります。
定数名 | 値 | 説明 | 例 |
xlHairline | 1 | 極細 | |
xlThin | 2 | 細 | |
xlMedium | -4138 | 中 | |
xlThick | 4 | 太 |
Borders.Weight から取得するときは、上下左右のすべての罫線の太さが同じときだけ値を取得します。違う太さが含まれているときは Null になります。
セルの範囲の罫線を取得する
セルの範囲「A1」~「B2」の罫線を取得するには Range("A1:B2").Borders または Range("A1", "B2").Borders を入力します。
Dim bs As Borders
Set bs = Range("A1:B2").Borders ' A1 ~ B2 のすべての上下左右の罫線
Set bs = Range("A1", "B2").Borders ' A1 ~ B2 のすべての上下左右の罫線
Debug.Print(bs.LineStyle)
Debug.Print(bs.Weight)
Dim b As Border
Set b = Range("A1:B2").Borders(xlEdgeTop) ' A1 と B1 の上側の罫線
Debug.Print(b.LineStyle)
Set b = Range("A1:B2").Borders(xlEdgeBottom) ' A2 と B2 の下側の罫線
Debug.Print(b.LineStyle)
セルの範囲の Borders から各プロパティの値を取得するときは、範囲内の各セルの上下左右のすべての値が同じときだけ取得します。違う値が含まれているときは 0 または Null になります。
xlEdgeTop など辺を指定すると、範囲全体のその辺の値がすべて同じときだけ取得します。違う値が含まれているときは 0 または Null になります。
罫線があるか判定する
セルの上下左右に罫線が引かれているか判定するには Borders.LineStyle が xlLineStyleNone かどうかを調べます。
各辺に罫線が引かれているか判定するには Border.LineStyle が xlLineStyleNone かどうかを調べます。
Dim ls As Variant
ls = Range("B2").Borders.LineStyle ' 上下左右の罫線
ls = Range("B2").Borders(xlEdgeTop).LineStyle ' 上側の罫線
ls = Range("B2").Borders(xlEdgeBottom).LineStyle ' 下側の罫線
ls = Range("B2").Borders(xlEdgeLeft).LineStyle ' 左側の罫線
ls = Range("B2").Borders(xlEdgeRight).LineStyle ' 右側の罫線
If ls = xlLineStyleNone Then
Debug.Print("なし")
Else
Debug.Print("罫線あり")
End If
別シートのセルの罫線を取得する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
Dim bs As Borders
' Sheet1 のセル「A1」の罫線を取得
Set bs = Worksheets("Sheet1").Range("A1").Borders
Set bs = Worksheets(1).Range("A1").Borders
Debug.Print(bs.LineStyle)
' Sheet2 のセル「A1」の罫線を取得
Set bs = Worksheets("Sheet2").Range("A1").Borders
Set bs = Worksheets(2).Range("A1").Borders
Debug.Print(bs.LineStyle)
Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。
' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"
標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
スポンサーリンク