更新日:、 作成日:
VBA セルの罫線の色を取得する
はじめに
Excel VBA マクロでセルの罫線の色を取得する方法を紹介します。
Range("B1").Borders または Cells(1, 2).Borders プロパティから、セル「B1」の罫線を取得できます。
Border.Color プロパティから、罫線の色を取得できます。
セルの罫線の色を取得する
Range の引数にセル名を指定すると、そのセルの罫線の色を取得できます。
セル「A1」の上下左右の罫線の色を取得するには Range("A1").Borders.Color を入力します。上側の罫線の色を取得するには Range("A1").Borders(xlEdgeTop).Color を入力します。
Dim l As Long
l = Range("A1").Borders.Color ' 上下左右の罫線の色
l = Range("A1").Borders(xlEdgeTop).Color ' 上側の罫線の色
l = Range("A1").Borders(xlEdgeBottom).Color ' 下側の罫線の色
l = Range("A1").Borders(xlEdgeLeft).Color ' 左側の罫線の色
l = Range("A1").Borders(xlEdgeRight).Color ' 右側の罫線の色
Cells の引数にセルの行と列の番号を指定すると、そのセルの罫線の色を取得できます。
行「2」、列「A」の罫線の色を取得するには Cells(2, 1).Borders を入力します。
Dim l As Long
l = Cells(1, 1).Borders.Color ' A1
l = Cells(2, 1).Borders.Color ' A2
l = Cells(1, 2).Borders.Color ' B1
l = Cells(2, 2).Borders.Color ' B2
取得した色は「RGB 関数」と同じ形式の値です。
Borders.Color から取得するときは、上下左右のすべての色が同じときだけ値を取得します。違う色が含まれているときは 0 になります。
隣接するセルの罫線は同じものです。セル「A1」の下側に罫線を引くと、セル「A2」の上側に罫線が引かれたことになります。
セルの範囲の罫線の色を取得する
セルの範囲「A1」~「B2」の罫線の色を取得するには Range("A1:B2").Borders.Color または Range("A1", "B2").Borders.Color を入力します。
Dim l As Long
l = Range("A1:B2").Borders.Color ' セル「A1」~「B2」のすべての上下左右の罫線
l = Range("A1", "B2").Borders.Color ' セル「A1」~「B2」のすべての上下左右の罫線
Debug.Print(l)
l = Range("A1:B2").Borders(xlEdgeTop).Color ' セル「A1」と「B1」の上側の罫線
l = Range("A1:B2").Borders(xlEdgeBottom).Color ' セル「A2」と「B2」の下側の罫線
Debug.Print(l)
Borders から取得するときは、範囲内の各セルの上下左右のすべての色が同じときだけ値を取得します。違う色が含まれているときは 0 になります。
xlEdgeTop など辺を指定すると、範囲全体のその辺の色がすべて同じときだけ値を取得します。違う色が含まれているときは 0 になります。
スポンサーリンク
別シートのセルの罫線の色を取得する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
Dim l As Long
' Sheet1 のセル「A1」の罫線の色を取得
l = Worksheets("Sheet1").Range("A1").Borders.Color
l = Worksheets(1).Range("A1").Borders.Color
Debug.Print(l)
' Sheet2 のセル「A1」の罫線の色を取得
l = Worksheets("Sheet2").Range("A1").Borders.Color
l = Worksheets(2).Range("A1").Borders.Color
Debug.Print(l)
Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。
' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"
標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"