엑셀 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 녹두장군

댓글을 달아 주세요

  1. akacho 2016.01.05 16:05  댓글주소  수정/삭제  댓글쓰기

    VBA 글 잘 보고 있습니다.

    위에 예제에서 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)
    여기 r,g,b 값이 모두 0으로 나타납니다.


  2. 따라쟁이 2016.12.14 01:35  댓글주소  수정/삭제  댓글쓰기

    먼저 좋은 자료에 항상 감사드립니다.
    간만에 다시 VBA 공부를 시작하다보니 많은 도움을 받고 있습니다.

    윗글에서 제가 아는 것과 약간 다른 부분이 있어서 댓글 남깁니다.
    Colorindex 속성부분에서 말씀하신 0 과 2 는 같은 색이 아니라
    다음과 같은 차이가 있는 것으로 알고 있습니다.

    Colorindex 0 은 채우기 없음
    Colorindex 2 는 흰색

    아마도 채우기 없음 상태에서 셀의 바탕색이 흰색이니 같은 색으로 간주하신 것 같기는 한데
    Colorindex 2로 채우기를 할 경우, 주변의 셀테두리 부분의 연회색 선이 사라져버린다는 점에서
    조금 다르게 봐야하지않을까 싶네요...
    어차피 기본적인 셀구분선도 연회색으로 보이기는 하지만
    가상의 선이라서 실제로는 프린트가 되지않는 무색으로 봐야하거든요... ^^


    앞으로도 좋은 정보 많은 공유 부탁드립니다. 꾸벅~