엑셀 VBA 셀 색상 변경하는 두 가지 방법

엑셀(Excel)/VBA

엑셀 VBA 셀 색상 변경하는 두 가지 방법

 

환경: Microsoft Excel 2013

 

VBA 에서 셀의 배경색을 변경하는 방법은 2가지 있습니다. ColorIndex Color 속성을 이용하는 것입니다. 세팅하는 값의 종류는 틀립니다. Cell 개체를 이용해서 직접 엑셀에 적용되도록 소스를 구현하였습니다.

 

문법은 아래와 같습니다. ColorIndex 에는 VBA 에서 내부적으로 정한 index 값이 들어갑니다. Color 속성에는 RGB함수의 리턴값이 들어갑니다.

 

Cell(1, 1).Interior.ColorIndex = “index

Cell(1, 1).Interior.Color = RGB(red, green, blue)

 

1. ColorIndex 속성으로 색 지정하기

 

색깔을 변경하는 방법 중에 하나인 ColorIndex 속성에 표의 index 값을 넘기면 해당 색상이 적용됩니다. index 값은 0 에서 56 까지 57 개가 있는데 0 2가 동일하게 하얀색이므로 56 개입니다. 

엑셀 VBA 셀 색상 변경하는 두 가지 방법

 

샘플 소스는 매크로를 이용해서 표에 나와 있는 ColorIndex 값을 셀에 적용한 것입니다. For 문으로 56 번 돌면서 셀에 하나씩 색상값과 HEX 값을 표시 했습니다. 그리고 HEX 값을 2자리씩 분리해서 "=Hex2Dec(""" & Right(str0, 2) & """)" 식으로 문자열을 만듭니다. 셀에 넣은 것은 엑셀 시트에서 지원하는 함수를 사용하기 위해서 입니다. 셀 수식에 문자열이 들어가면서 자동으로 Hex2Dec 함수가 적용됩니다. Hex2Dec Hex 16진수 코드를 10진수로 변경해 주는 함수 입니다. 10진수는 RGB() 함수로 색생을 표현할 때 사용합니다.

 

Sub ChangeColorIndex()

 

    '57 colors, 0 to 56

    Dim i As Long

    Dim str0 As String, str As String

   

    For i = 0 To 56

        Cells(i + 1, 1).Interior.ColorIndex = i

        Cells(i + 1, 2).Font.ColorIndex = i

        Cells(i + 1, 2).Value = "[Color " & i & "]"

       

        ' HEX 값 구해서 분리하기

        str0 = Right("000000" & Hex(Cells(i + 1, 1).Interior.Color), 6)

        str = Right(str0, 2) & Mid(str0, 3, 2) & Left(str0, 2)

 

        Cells(i + 1, 3) = "#" & str

       

        ' RGB 값 표시하기

        Cells(i + 1, 4).Formula = "=Hex2dec(""" & Right(str0, 2) & """)"

        Cells(i + 1, 5).Formula = "=Hex2dec(""" & Mid(str0, 3, 2) & """)"

        Cells(i + 1, 6).Formula = "=Hex2dec(""" & Left(str0, 2) & """)"

    Next i

 

End Sub

 

엑셀 VBA 셀 색상 변경하는 두 가지 방법

 

2. Color 속성으로 색 지정하기

 

▼ 두 번째로 Range Cell 개체의 속성 중 Color 은 값으로 RGB() 값을 받습니다. RGB 함수는 3개의 인수가 있으며 red, green, blue 계열의 값을 넣어서 색을 조합해서 만듭니다. 각 십진수 값인 숫자 0 ~ 255 중 하나 입니다.

 

RGB(red, green, blue)

 

 샘플은 ColorIndex 대신 Color 속성에 RGB 함수의 리턴값을 넣었습니다. 먼저ColorIndex로 적용한 색상 값을 다시 불러와서 Hex 로 변환한 뒤 2개씩 분리합니다. 그리고 RGB 함수의 인수로 넣었습니다.

 

Function hexToDec(Hex As String) As Long

  hexToDec = Val("&H" & Hex)

End Function

 

Function decToHex(Dec As Long) As String

  decToHex = Hex(Dec)

End Function

 

Sub ChangeColor()

    '57 colors, 0 to 56

    Dim i As Long

    Dim str0 As String, str As String

    Dim r As Integer, g As Integer, b As Integer

   

    For i = 0 To 56

       

        Cells(i + 1, 1).Interior.ColorIndex = i

       

        ' HEX 값 구해서 분리하기

        str0 = Right("000000" & Hex(Cells(i + 1, 1).Interior.Color), 6)

        str = Right(str0, 2) & Mid(str0, 3, 2) & Left(str0, 2)

       

        r = CInt(hexToDec(Right(str0, 2)))

        g = CInt(hexToDec(Mid(str0, 3, 2)))

        b = CInt(hexToDec(Left(str0, 2)))

 

        Cells(i + 1, 1).Interior.Color = RGB(r, g, b)

        Cells(i + 1, 2).Font.ColorIndex = i

        Cells(i + 1, 2).Value = "[Color " & i & "]"

       

        ' 16 진수

        Cells(i + 1, 3) = "#" & str

        ' 10 진수

        Cells(i + 1, 4) = "RGB(" & Right(str0, 2) & "," & Mid(str0, 3, 2) & "," & Left(str0, 2) & ")"

    

    Next i

   

End Sub

 

엑셀 VBA 셀 색상 변경하는 두 가지 방법

 

Posted by 녹두장군