Please Enable JavaScript!
Gon[ Enable JavaScript ]

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

엑셀(Excel)/VBA
반응형

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 셀 색상 변경하는 두 가지 방법

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 폰트(Font) 색상과 스타일, 사이즈, 글꼴 변경하기
엑셀 VBA 동일한 셀의 배경색을 구분하여 값을 합산하는 방법
엑셀 VBA 배경색 적용하는 다양한 방법
엑셀 VBA 동일한 글자색 개수 구하기
셀 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 셀 색상 변경하는 두 가지 방법

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 폰트(Font) 색상과 스타일, 사이즈, 글꼴 변경하기
엑셀 VBA 동일한 셀의 배경색을 구분하여 값을 합산하는 방법
엑셀 VBA 배경색 적용하는 다양한 방법
엑셀 VBA 동일한 글자색 개수 구하기
셀 VBA 시트 테두리 그리는 방법
반응형
Posted by 녹두장군1
,