요이번 강좌는 에셀 시트의 모든 셀의 색상을 한번에 제거하는 방법을 알려 들리려고 합니다. 강좌라고 할것도 없을 만큼 간단한 스크립트인데요. select all 한다음 셀 색상을 빼내도 되긴 하겠지만 자동화 과정 중에 셀 색상을 초기화 해야 하는 경우가 있다면 아래의 스크립트를 이용하여 모두 초기화 시킨 후 자동화 과정을 수행할 수 있습니다.
Sub crearCellColor()
Cells.Interior.Color = xlNone
End Sub
간단하죠?
이렇게 특정 시트에 대한 지정없이 사용하는 것은 특정 시트에 바로 스크립트를 작성하는 경우인데요. ThisWorkBook 과 같은 공용 위치에서 스크립트를 작성할 때는 색상을 초기화 해줄 시트를 지정해 주어야 합니다.
Sub crearCellColor()
Dim aSht As Worksheet
Set aSht = ActiveSheet
aSht.Cells.Interior.Color = xlNone
End Sub
요렇게 상단에 worksheet 개체를 정의 하여 주고 해당 시트가 현재 활성화 되어 있는 시트임을 알려준뒤 해당 시트에서 실행을 하면 됩니다.
선택된 영역 또는 특정영역에 컬러는 채워넣을 때는 RGB(255,255,255) 와 같은 함수를 이용합니다. 만약 셀에 노란색을 채워 넣으려면 아래와 같이 하면 됩니다.
이번 강좌에서는 셀에 입력되어 있는 컬러 값을 이용하여 셀의 색상을 지정하는 방법을 알아보도록 하겠습니다. 디자이너 분들이라면 언제가 한번쯤은 엑셀 시트에 자신이 정의한 컬러 값을 정리해서 보내야 하는 경우가 생길 수 있게 마련입니다. 요구사항을 내는 담당자는 포토샵이나 일러스트 보다는 엑셀이 더 익숙하기 때문에 엑셀로 정의되어 있는 컬러값을 전달 받기를 원하게 마련입니다. 물론 우리는 스마트하게 컬러까지 딱 채워서 보내주면 담당자가 아주 흡족해 하겠죠.
먼저 셀에 컬러를 표현할 수 있는 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
이번에는 이미 값이 분리 되어 있으므로 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 (자를 문자, 구분자) 를 이용하여 잘라 배열 변수에 담게 되면 잘라진 각각의 내용을 하나씩 꺼내어 사용할 수 있게 됩니다.