본문 바로가기
컴퓨터 이모저모

엑셀, 서로 다른 값을 색상으로 구분하기(VBA 사용)

by 지각쟁이 2024. 3. 24.
반응형

동일한 값이 연속되는 경우

VBA 각각의 값에 다른 색을

넣어주면

데이터를 편하게 볼 수 있다.

 

어떻게 해야할지 방법을 소개한다.

 

목차

1. 해당 매크로의 기능
2. VBA실행 및 모듈 삽입
3. 버튼 만들기(또는 단축키)
4. 코드 분석

 

 

 

1. 해당 매크로의 기능

정확히 어떤 기능을 하는지

우선 알아보겠다.

[값1]을 보면,

흰색과 녹색이 번갈아가면서

나오는 것을 볼 수 있다.

 

동일한 값이 연속되면

동일한 색상이 된다.

 

 

① 필터로 정렬을 하고

② 해당 매크로를 실행하면

모든 중복되는 값의 색을

동일하게 할 수도 있다.

 

 

 

2. VBA실행 및 모듈 삽입

VBA 실행 단축키

 

VBA실행은

단축키[ ALT+F11 ]을 사용한다.

 

 

상단에 보이는

'삽입 → 모듈'을 선택한다.

 

Sub Color_Duplicates()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim prevValue As Variant
    Dim currentColor As Long
    Dim columnLetter As String
    Dim color1 As String, color2 As String
    Dim color1RGB() As String, color2RGB() As String

    ' 사용자에게 열 문자와 두 가지 색상의 RGB 값을 입력
    columnLetter = InputBox("비교할 열의 문자를 입력하세요. 예: A, B, C ...", "열 선택")
    color1 = InputBox("첫 번째 색상의 RGB 값을 쉼표로 구분하여 입력하세요. 예: 255,0,0", "첫 번째 색상")
    color2 = InputBox("두 번째 색상의 RGB 값을 쉼표로 구분하여 입력하세요. 예: 0,255,0", "두 번째 색상")

    ' 입력받은 RGB 값을 배열로 변환
    color1RGB = Split(color1, ",")
    color2RGB = Split(color2, ",")

    Set ws = ActiveSheet
    Set rng = ws.Range(columnLetter & "2:" & columnLetter & ws.Cells(ws.Rows.Count, columnLetter).End(xlUp).Row)

    ' 첫 번째 색상을 초기 색상으로 설정
    currentColor = RGB(color1RGB(0), color1RGB(1), color1RGB(2))

    For Each cell In rng
        If prevValue <> cell.Value And prevValue <> "" Then
            ' 현재 색상이 첫 번째 색상이면 두 번째 색상으로, 아니면 첫 번째 색상으로 전환
            If currentColor = RGB(color1RGB(0), color1RGB(1), color1RGB(2)) Then
                currentColor = RGB(color2RGB(0), color2RGB(1), color2RGB(2))
            Else
                currentColor = RGB(color1RGB(0), color1RGB(1), color1RGB(2))
            End If
        End If
        cell.Interior.Color = currentColor
        prevValue = cell.Value
    Next cell
End Sub

 

그리고 위의 코드를 입력한다.

 

color_duplicates.bas
0.00MB
color_duplicates.txt
0.00MB

 

bas 파일이나,

txt파일을 다운받아서

사용하면 편하다.

 

 

3. 버튼 만들기(또는 단축키)

코드를 입력했다면,

F5 버튼을 누르면

실행할 수 있다.

 

또는 상단에 보이는

뭔가 재생처럼 보이는

녹색 삼각형을 누르면 된다.

 

일일이 이렇게

VBA창과 

엑셀 화면을 왔다갔다 하면

번거로우므로

버튼을 만들거나

단축키를 사용할 수도 있다.

 

 

① 버튼 만들기

 

[ 개발도구 → 삽입 ]으로 가면

버튼을 만들 수 있다.

 

버튼에 매크로를 지정하고

'확인'을 누른다.

 

② 단축키 사용

또는 단축키 [ ALT+F8 ]을 누르면

매크로 창을 볼 수 있다.

 

매크로 창

 

매크로 창에서

생성한 매크로를 '실행'시킨다.

 

 

4. 코드분석

Sub Color_Duplicates()

    ' 필요한 변수를 선언
    Dim ws As Worksheet          ' 현재 활성화된 워크시트를 참조하기 위한 변수
    Dim rng As Range             ' 비교할 열 범위를 저장할 변수
    Dim cell As Range            ' 반복문에서 사용할 개별 셀을 참조하기 위한 변수
    Dim prevValue As Variant     ' 이전 셀의 값을 저장하기 위한 변수
    Dim currentColor As Long     ' 현재 사용할 색상의 RGB 값을 저장할 변수
    Dim columnLetter As String   ' 사용자에게 입력받은 열 문자를 저장할 변수
    Dim color1 As String, color2 As String       ' 사용자에게 입력받은 두 색상의 RGB 문자열을 저장할 변수
    Dim color1RGB() As String, color2RGB() As String ' RGB 문자열을 분할하여 저장할 배열 변수

    ' 사용자로부터 열 문자와 두 색상의 RGB 값을 입력받음
    columnLetter = InputBox("비교할 열의 문자를 입력하세요. 예: A, B, C ...", "열 선택")
    color1 = InputBox("첫 번째 색상의 RGB 값을 쉼표로 구분하여 입력하세요. 예: 255,0,0", "첫 번째 색상")
    color2 = InputBox("두 번째 색상의 RGB 값을 쉼표로 구분하여 입력하세요. 예: 0,255,0", "두 번째 색상")

    ' 입력받은 색상의 RGB 값을 배열로 변환
    color1RGB = Split(color1, ",")
    color2RGB = Split(color2, ",")

    ' 현재 활성화된 워크시트와 비교할 열 범위를 설정
    Set ws = ActiveSheet
    Set rng = ws.Range(columnLetter & "2:" & columnLetter & ws.Cells(ws.Rows.Count, columnLetter).End(xlUp).Row)

    ' 첫 번째 색상을 초기 색상으로 설정
    currentColor = RGB(color1RGB(0), color1RGB(1), color1RGB(2))

    ' 설정한 범위 내의 각 셀에 대해 반복
    For Each cell In rng
        ' 이전 셀의 값과 현재 셀의 값을 비교하여 다를 경우 색상을 전환
        If prevValue <> cell.Value And prevValue <> "" Then
            ' 현재 색상이 첫 번째 색상이면 두 번째 색상으로, 그렇지 않으면 첫 번째 색상으로 전환
            If currentColor = RGB(color1RGB(0), color1RGB(1), color1RGB(2)) Then
                currentColor = RGB(color2RGB(0), color2RGB(1), color2RGB(2))
            Else
                currentColor = RGB(color1RGB(0), color1RGB(1), color1RGB(2))
            End If
        End If
        ' 현재 셀의 배경색을 설정
        cell.Interior.Color = currentColor
        ' 현재 셀의 값을 이전 값 변수에 저장
        prevValue = cell.Value
    Next cell
End Sub

 

앞서 보여준 코드와 동일하지만,

좀 더 상세하게 주석을 넣었다.

 

코드에서는

입력된 열을 확인하여,

이전 셀의 값과 다를 경우

지정된 두 색을 번갈아가며 색칠함으로써

값의 변화를 시각적으로 강조할 수 있다.

 

개인적으로, 대량의 데이터를

시각적으로 비교할 필요가 있어

작성했으며,

데이터의 패턴이나 중복을 검토할때

효과적이지 않을까 싶다.

반응형