이번 포스팅에서는 엑셀 다른 셀 끼리 다른 값들이 입력 되어있을때 각각 다른색상을 입히는 방법에 대해서 알아보겠습니다. 여기서 제시된 방법은 조건부 서식을 이용한 방법이 아닌 vba 코드를 입힌 방법으로 특정 열 값에 있어서 위 아래 다른 값들 셀 생각을 회색과 흰색으로 구분하는 방법에 대해서 알려드리겠습니다.
개발도구 VBA 열기 (다른 값 색깔 구분)
VBA 를 먼저 열어줍니다.
개발도구를 만드는 방법은 아래 링크를 참고해주세요.
모듈 생성을 합니다.
색 구분 코드 해석
매크로 정의하기
Sub 색상적용시키기()
매크로 이름을 "색상적용시키기"로 만들어보겠습니다.
변수 설정
Dim ws As Worksheet
현재 활성화 워크시트를 ws 로 객체 설정합니다.
Dim rng As Range
색상을 변경할 셀 범위를 참조하기위한 범위를 rng(range)로 객체 설정합니다.
Dim cell As Range
각 셀을 For each 반복문으로 순회할 때 사용 할 범위 객체입니다.
Dim prevValue As Variant
이전 셀의 값을 저장하기 위한 변수 설정합니다.
Dim currentColor As Variant
현재 색상을 저장하기 위한 변수 설정합니다.
참조 설정
Set ws = ActiveSheet
ws 객체를 현재 활성화된 워크시트로 참조합니다. (활성화된 시트는 코드를 적용할 시트를 말합니다.)
Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).row)
rng 객체를 A1셀 부터 데이터 마지막 셀까지 범위로 설정합니다.
여기서
ws.Cells(ws.Rows.Count, "A").End(xlUp).row)
는 A열의 마지막 데이터 셀의 행 번호를 반환합니다.
즉, 마지막데이터가 만약 A110에 있으면 110을 반환하게 되어서
범위를 A1:A110까지 잡게 되는 것 입니다.
A가 아니라 원하는 열에 색상을 입히고 싶으면 A를 바꿔주면 됩니다.
currentColor = RGB(211, 211, 211)
RGB코드 211,211,211으로 옅은 회색으로 초기 설정합니다.
옅은 회색을 원치않을 경우 RGB 코드를 참고하시면 됩니다.
반복문 설정 (셀 순회)
For Each cell In rng
rng (A1:마지막셀) 까지 범위중에 각각의 셀을 순회하기 위해 반복문을 설정해줍니다. (For 문도 가능)
If prevValue <> cell.Value And prevValue <> "" Then
IF 조건문을 시작을 시작해서 조건을 만들어줍니다.
조건은 prevValue(이전 셀의 값) 과 cell.Value(현재 셀의 값)이 다르고 (<>)
+
prevValue(이전 셀의 값이 빈셀("")이 아닐 경우에
And를 넣어서 두 조건다 충족해야지만 참값으로 넘어갑니다.
If currentColor = RGB(211, 211, 211) Then
currentColor = RGB(255, 255, 255)
만약 현재 셀이 옅은 회색이면 현재셀을 흰색으로 바꿉니다.
Else
currentColor = RGB(211, 211, 211)
만약 현재셀이 옅은 회색이 아니면 (흰색이면) 현재셀을 회색으로 바꿉니다.
211,211,211 옅은 회색
255,255,255 흰색
End If (두번째 IF문 종료)
두번째 IF 조건문은 첫번째 조건문이 참일 경우에 성립합니다.
즉 이전셀과 현재셀이 다르고 이전 셀이 빈셀이 아닐경우에 두번째 IF문이 시작됩니다.
End If (첫번째 IF문 종료)
cell.Interior.Color = currentColor
현재 셀의 배경색상을 currentColor로 설정합니다.
prevValue = cell.Value
현재 셀의 값을 이전값에 저장합니다.
Next cell (반복 다음 셀 로 이동)
마지막 rng까지 반복
End Sub (매크로 종료)
모듈에 코드 넣기
모듈에 아래 코드를 넣어줍니다.
코드는 아래 메모장에 넣어놨으니 편하게 사용하시면 됩니다.
Sub 색상적용시키기()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim prevValue As Variant
Dim currentColor As Variant
Set ws = ActiveSheet
Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).row)
For Each cell In rng
If prevValue <> cell.Value And prevValue <> "" Then
If currentColor = RGB(211, 211, 211) Then
currentColor = RGB(255, 255, 255)
Else
currentColor = RGB(211, 211, 211)
End If
End If
cell.Interior.Color = currentColor
prevValue = cell.Value
Next cell
End Sub
버튼 만들기
모듈에 코드를 넣었으면 실행을 할 버튼을 만들어줍니다.
개발도구 > 삽입 > 단추 컨트롤(버튼)을 삽입합니다.
버튼 만들기 싫다 하시는분은 알트+F8 눌러서 매크로 실행을 해도 됩니다.
모듈에 만들어 놓았던 Sub명이 보일 겁니다.
선택하고 확인을 눌러줍니다.
단추이름은 오른쪽 마우스 클릭 > 텍스트 편집으로 이름을 바꿀 수 있습니다.
이상으로 1개 열에 같은 셀 값끼리 색상을 묶는 방법에 대해서 알아보았습니다.
조건부 서식으로도 구현이 가능합니다. (복잡한 함수활용)
위 포스팅에서 사용된 파일은 아래 첨부 파일을 확인바랍니다.
엑셀 유용한 기능
'엑셀공부 > VBA 하루에 하나씩' 카테고리의 다른 글
엑셀 VBA 기초 END 속성 ROWS.COUNT (0) | 2024.07.07 |
---|---|
엑셀 VBA 기초 RANGE, CELLS 셀 선택하기 (2) | 2024.06.30 |
엑셀 마지막 행 값 가져오기 함수와 매크로 VBA 방법 알아보기 (5) | 2023.12.13 |
엑셀 vba for 반복문 vba 공부하기 #1 (0) | 2023.12.06 |
엑셀 매크로 차단 해제 매크로 세팅 방법 EXCEL VBA (0) | 2022.10.09 |