반응형

이번 강좌에서는 셀에 입력되어 있는 컬러 값을 이용하여 셀의 색상을 지정하는 방법을 알아보도록 하겠습니다. 디자이너 분들이라면 언제가 한번쯤은 엑셀 시트에 자신이 정의한 컬러 값을 정리해서 보내야 하는 경우가 생길 수 있게 마련입니다. 요구사항을 내는 담당자는 포토샵이나 일러스트 보다는 엑셀이 더 익숙하기 때문에 엑셀로 정의되어 있는 컬러값을 전달 받기를 원하게 마련입니다. 물론 우리는 스마트하게 컬러까지 딱 채워서 보내주면 담당자가 아주 흡족해 하겠죠.

먼저 셀에 컬러를 표현할 수 있는 RGB 에 대한 색상이 저장되어 있다는 가정하에 코드를 작성할 예정입니다. 셀에 입력되어 있는 값이 여러가지 경우가 있을 수 있기 때문에 오늘은 그 여러가지 경우의 컬러를 지정하는 방법을 알아볼 예정입니다.

먼저 셀의 색상을 지정하는 코드는 아래와 같습니다.

Cells(1,1).Interior.Color = RGB(255,255,255)

여기서 Cells(1,1) 부분은 For each c 라는 식의 반복문에서 c 로 변경하여 적용하면 됩니다.

 

오늘 알아볼 색상 적용 방법은 다음과 같습니다.

 

  • 6자리 HEX 코드로 입력된 셀에 색상을 입히는 방법
  • HEX값이 R,G,B 로 각각 나뉘어 기록되어 있는 경우 색을 칠하는 방법
  • RGB 값이 각각 셀에 지정되어 있을 때 색을 칠하는 방법
  • RGB 값이 하나의 셀에 특정한 구분자를 이용하여 적용되어 있을 때 색을 칠하는 방법

 

 

6자리 HEX 코드로 입력된 셀에 색상을 입히는 방법

 

먼제 셀에 아래와 같은 형식으로 입력이 되어 있다고 가정하고 코드를 작성해 보겠습니다.

 

색상 코드에 # 가 붙어있는 녀석도 있고 없는 녀석도 있군요

이런 경우라면 약간의 판단 코드가 추가되어야 하겠습니다.

아래 코드를 보시죠.

Sub setColor()


    Dim rngA As Range
    Dim c As Range
    
    Dim cur_value As String
    
    Dim c_red As String
    Dim c_green As String
    Dim c_blue As String
    
    Set rngA = [A1:A10]

    For Each c In rngA
    
        '첫글자가 # 이라면 #을 빼내주는 코드
        If InStr(c.Value, "#") Then
            cur_value = Mid(c.Value, 2, Len(c.Value) - 1)
        Else
        	cur_value = c.Value
        End If
        
        ' 6자리의 문자열에서 RGB 의 각각 색상으로 구분하여 주는 방법
        c_red = Left(cur_value, 2)
        c_green = Mid(cur_value, 3, 2)
        c_blue = Right(cur_value, 2)
        
        ' RGB 로 나뉘어진 16진수 값을 0~255 의 자연수로 변경해주는 함수
        c_red = WorksheetFunction.Hex2Dec(c_red)
        c_green = WorksheetFunction.Hex2Dec(c_green)
        c_blue = WorksheetFunction.Hex2Dec(c_blue)
        
        c.Interior.Color = RGB(c_red, c_green, c_blue)
        
    Next c
        
    

End Sub

실행시켜 보시면 요렇게 셀에 예쁘게 색상이 적용이 됩니다.

여기서 코드중에 WorksheetFunction.Hex2Dec(c_blue) 라는 코드가 있는데요. WorksheetFunction 이라 하면 엑셀 상단에 함수 작성하는 계산식 입력창이 있죠? 여기에 사용되는 함수가 바로 WorksheetFunction 인데요. 그 함수들 중에 Hex2Dec 라는 함수를 가져와서 쓰겠다는 것 입니다. 엑셀에는 이미 많은 훌륭한 함수 들이 있기 때문에 엑셀 vba 에서 그것들을 이용함으로써 빠르고 손쉽게 코딩이 가능하다는 장점이 있습니다.

 

HEX값이 R,G,B 로 각각 나뉘어 기록되어 있는 경우 색을 칠하는 방법

 

이번에는 아래와 같이 RGB 가 셀마다 정의되어 있는데 이 값이 Hex인 경우입니다.

위에서 작성한 코드가 거의 대부분 재활용될 예정이므로 어떤 부분이 변경이 되는지 잘 보시기 바랍니다.

Sub setColor()


    Dim rngA As Range
    Dim c As Range
    
    Dim cur_value As String
    
    Dim c_red As String
    Dim c_green As String
    Dim c_blue As String
    
    Set rngA = [A1:A10]

    For Each c In rngA
    
        ' c 를 기준으로 우측 첫번째, 두번째 칸의 값을 각각 변수에 적용
        c_red = c.Value
        c_green = c.Offset(0, 1).Value
        c_blue = c.Offset(0, 2).Value
        
        ' RGB 로 나뉘어진 16진수 값을 0~255 의 자연수로 변경해주는 함수
        c_red = WorksheetFunction.Hex2Dec(c_red)
        c_green = WorksheetFunction.Hex2Dec(c_green)
        c_blue = WorksheetFunction.Hex2Dec(c_blue)
        
        c.Interior.Color = RGB(c_red, c_green, c_blue)
        c.Offset(0, 1).Interior.Color = RGB(c_red, c_green, c_blue)
        c.Offset(0, 2).Interior.Color = RGB(c_red, c_green, c_blue)
        
    Next c
        
    

End Sub

 

2022.12.02 - [DEV/VBA] - [excel vba] 16진수를 10진수로, 10진수를 16진수로 변경

위의 코드를 실행시켜 보시면 아래와 같이 색상이 칠해지는 것을 알 수 있습니다.

이번에는 이미 값이 분리 되어 있으므로 c 라는 셀을 기준으로 우측 첫번째, 두번째 값을 RGB 변수에 저장하는 과정이 들어갔습니다.

별다를건 없죠?

 

 

RGB 값이 각각 셀에 지정되어 있을 때 색을 칠하는 방법

보통은 첫번째 케이스와 아래와 같은 케이스가 가장 많을 것 같습니다. 

위의 두가지 케이스를 직접 해보셨다면 아래의 케이스는 이제 감이 잡이실것 같은데요.

네. 바로 Hex --> Dec 로 변경하는 코드는 여기에선 필요가 없습니다. 그냥 바로 셀에 적용하면 되겠죠?

Sub setColor()

    Dim rngA As Range
    Dim c As Range
    
    Dim cur_value As String
    
    Dim c_red As String
    Dim c_green As String
    Dim c_blue As String
    
    Set rngA = [A1:A10]

    For Each c In rngA
    
        cur_value = c.Value
        
        ' 6자리의 문자열에서 RGB 의 각각 색상으로 구분하여 주는 방법
        c_red = c.Value
        c_green = c.Offset(0, 1).Value
        c_blue = c.Offset(0, 2).Value        
        
        c.Interior.Color = RGB(c_red, c_green, c_blue)
        c.Offset(0, 1).Interior.Color = RGB(c_red, c_green, c_blue)
        c.Offset(0, 2).Interior.Color = RGB(c_red, c_green, c_blue)
        
    Next c           

End Sub

요렇게 적용하시면 됩니다. 적용 결과는?

네 .. 이렇게 잘 색칠이 되었네요.

 

 

RGB 값이 하나의 셀에 적용되어 있을 때 색을 칠하는 방법

네 마지막으로 RGB 값이 하나의 셀에 적용되어 있을때 입니다. 보통은 , 로 255,235,223 이런식으로 구분을 하여 넣어 주겠죠. 위에 LEFT, MID, RIGHT 와 같은 문자열의 위치를 이용하여 잘라내기가 쉽지 않습니다. 숫자가 1~3자리까지 다양하게 나올 수 있기 때문에 좀 다른 방법으로 글자를 떼어내볼 예정입니다.

여기서 사용할 함수는 Split 이라는 함수고요. 특정 글자를 이용하여 문자열을 배열로 잘라 나눠담아 주는 함수 입니다.

바로 엑셀에 이렇게 값이 들어있는 경우입니다.

Sub setColor()

    Dim rngA As Range
    Dim c As Range
    
    Dim cur_value() As String
    
    Dim c_red As String
    Dim c_green As String
    Dim c_blue As String
    
    Set rngA = [A1:A10]

    For Each c In rngA
    
        cur_value = Split(c.Value, ",")
        
        ' 문자 배열에서 RGB 의 각각 색상으로 꺼내어 적용해주는 주는 방법
        c_red = cur_value(0)
        c_green = cur_value(1)
        c_blue = cur_value(2)
        
        c.Interior.Color = RGB(c_red, c_green, c_blue)
        
    Next c
            
End Sub

코드를 보면 크게 달라진건 없는데요. 배열에 값을 담기위한 배열 변수를 선언해 주는 부분, Split 을 이용하여 문자열을 분리하는 작업, 배열의 값을 각 색상별 변수에 적용하는 과정이 약간 차이가 있습니다.

Dim cur_value as string --> 일반 적인 문자열 변수

Dim cur_value() as string --> 배열 형식의 문자열 변수

문자열을 배열에 담기 위하여는 위와 같은 배열 형의 문자열 변수를 선언해주어야 합니다.

이후 Split (자를 문자, 구분자) 를 이용하여 잘라 배열 변수에 담게 되면 잘라진 각각의 내용을 하나씩 꺼내어 사용할 수 있게 됩니다.

 

 

어렵지 않죠? 

 

여기까지 하여 셀에 색상을 적용하는 스크립트를 마무리 해보겠습니다.

셀에 색상을 모두 지우는 스크립트도 준비하여 올려보도록 하겠습니다.

 

감사합니다.

도움이 되셨다면 공감~

2019/09/02 - [DEV/VBA] - [vba] 엑셀 시트의 모든 색상의 셀 색상 제거하기

 

[vba] 엑셀 시트의 모든 색상의 셀 색상 제거하기

요이번 강좌는 에셀 시트의 모든 셀의 색상을 한번에 제거하는 방법을 알려 들리려고 합니다. 강좌라고 할것도 없을 만큼 간단한 스크립트인데요. select all 한다음 셀 색상을 빼내도 되긴 하겠지만 자동화 과정..

diy-dev-design.tistory.com

2020/01/30 - [분류 전체보기] - [vba] 셀 속성 조정하기 (넓이, 높이, 숨기기, 테두리 등)

 

[vba] 셀 속성 조정하기 (넓이, 높이, 숨기기, 테두리 등)

이번 포스트에서는 vba 를 이용하여 셀의 속성을 조정하는 방법을 설명 드리겠습니다. 엑셀은 단순한 표의 형식을 취하고 있지만 셀의 간격이나 테두리 등의 속성을 자유롭게 조정할 수 있어 다양한 서식에 사용하..

diy-dev-design.tistory.com

2019/10/24 - [DEV/VBA] - [vba] 버튼(단추)를 이용하여 스크립트 실행하기

 

[vba] 버튼(단추)를 이용하여 스크립트 실행하기

어떤 엑셀 페이지에 늘 사용하는 스크립트를 작성하였으나 매번 실행하기 위하여 vba 창을 눌러 F5를 누르는 것은 사실 본인이 직접 스크립트 코드를 개발하는 입장이라면 조금도 번거로울 것이 없는 것이지만 누..

diy-dev-design.tistory.com

2019/08/12 - [DEV/VBA] - [VBA] 문자열 가지고 놀기

 

[VBA] 문자열 가지고 놀기

안녕하세요. 이번 글에서는 VBA 에서 문자열을 가지고 무엇인가를 하는 것을 알아보겠습니다. 프로그래밍을 하다 보면 조건을 가지고 어떤 액션을 해야 하는 결우가 무척 많은데요. 그중에 대표적인 것의 하나가..

diy-dev-design.tistory.com

 

 

 

 

 

반응형

+ Recent posts