동일한 값이 연속되는 경우
VBA 각각의 값에 다른 색을
넣어주면
데이터를 편하게 볼 수 있다.
어떻게 해야할지 방법을 소개한다.
목차 1. 해당 매크로의 기능 2. VBA실행 및 모듈 삽입 3. 버튼 만들기(또는 단축키) 4. 코드 분석 |
1. 해당 매크로의 기능
정확히 어떤 기능을 하는지
우선 알아보겠다.
[값1]을 보면,
흰색과 녹색이 번갈아가면서
나오는 것을 볼 수 있다.
동일한 값이 연속되면
동일한 색상이 된다.
① 필터로 정렬을 하고
② 해당 매크로를 실행하면
모든 중복되는 값의 색을
동일하게 할 수도 있다.
2. 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
그리고 위의 코드를 입력한다.
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
앞서 보여준 코드와 동일하지만,
좀 더 상세하게 주석을 넣었다.
코드에서는
입력된 열을 확인하여,
이전 셀의 값과 다를 경우
지정된 두 색을 번갈아가며 색칠함으로써
값의 변화를 시각적으로 강조할 수 있다.
개인적으로, 대량의 데이터를
시각적으로 비교할 필요가 있어
작성했으며,
데이터의 패턴이나 중복을 검토할때
효과적이지 않을까 싶다.
'컴퓨터 이모저모' 카테고리의 다른 글
안드로이드 폰에서 PC로 파일 쉽게 공유하기(퀵쉐어, 모든 PC에서 사용하기) (0) | 2024.05.18 |
---|---|
[엑셀] 서로 다른 영역에 있는 데이터 한번에 모으기 (0) | 2024.04.10 |
공공데이터 포털 : 엑셀 등 파일 데이터 및 오픈API 사용 가능 (0) | 2024.03.08 |
구글 서치 콘솔 '색인 생성 요청 거부됨' 해결 : 특수 문자 (2) | 2023.11.06 |
어도비 정품 소프트비스웨어 무결성 서비스 알림 없애는 방법 (1) | 2022.12.09 |