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 개입니다.
▼ 샘플 소스는 매크로를 이용해서 표에 나와 있는 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 폰트(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 폰트(Font) 색상과 스타일, 사이즈, 글꼴 변경하기 ▶ 엑셀 VBA 동일한 셀의 배경색을 구분하여 값을 합산하는 방법 ▶ 엑셀 VBA 셀 배경색 적용하는 다양한 방법 ▶ 엑셀 VBA 동일한 글자색 셀 개수 구하기 ▶ 엑셀 VBA 시트 테두리 선 그리는 방법 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 변수 생명 주기 지정하는 방법, Static 정적 변수 사용법 (1) | 2024.10.23 |
---|---|
엑셀 VBA 개별 파일 시트 복사해서 하나의 파일에 통합하기 (2) | 2024.10.23 |
엑셀 VBA 여러 시트 데이터 합치기 (18) | 2024.10.15 |
엑셀 VBA 상태바 STATUSBAR 정보 출력하기 (0) | 2024.10.12 |
엑셀 VBA 연산자 사용해서 String 문자열을 합치기 (2) | 2024.10.11 |
엑셀 VBA 셀 배경색 적용하는 다양한 방법 (0) | 2024.08.12 |
엑셀 VBA 행, 열 삭제 및 추가하기 (0) | 2024.08.12 |
엑셀 VBA 매크로 이용해서 특정 조건의 데이터를 삭제하고 싶을 때 (25) | 2024.07.06 |