본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #58 [ 불일치 영역 색칠하기 ]

by 일등미노왕국 2023. 7. 11.

각각의 이름중에 같은 열에 [불일치]가 포함되어 있으면 그 사람의 해당열을 노란색으로 칠하는 구문이다.

 

금일 본인의 코드에서는 복수의 행이 아닌 단일 행이 있는 경우라면 제대로 표현이 되지 않을 것이다.

이것은 기초방 59번 문제에서 해결해보려고 한다.

 

더보기
Option Explicit

Sub 기초방58()

    Dim rngAll As Range: Set rngAll = [d5:j24]
    Dim rngA As Range
    Dim rngU As Range
    
    rngAll.Interior.Color = xlNone                  '= 초기화
    
    For Each rngA In rngAll
        
        Do Until Cells(rngA.Row, "c") <> Cells(rngA(2, 1).Row, "c")   '= 순환셀과 바로 밑에 셀의 일치 여부
        
            If rngU Is Nothing Then Set rngU = rngA.Resize(2) Else _
            Set rngU = Union(rngU, rngA.Resize(2))                    '= 같은 사람의 같은 행을 rngU로 합침
            
            Set rngA = rngA.Offset(1)
            
        Loop
        
        If Not rngU Is Nothing Then                                    '= rngU가 비어있지 않다면
       
            If TypeName(Application.Match("불일치", rngU, 0)) <> "Error" Then rngU.Interior.ColorIndex = 6
                                                                       '= 불일치가 있으면 노란색음영을 칠해라
        End If
        Set rngU = Nothing
    
    Next rngA

End Sub

 코드를 설명하자면 rngAll 전체 영역을 순환하게 된다. 보통 본인은 해당영역의 첫번째 컬럼을 순환하면서 문제를 풀곤하는데 이번에는 다음에 공개할 기초발 59번을 위해서 불필요한 코드진행이 이뤄지는 이번 코드를 공개하려고 한다.

 

기초방 58번코드와 59번의 코드를 F8번으로 이동하면서 비교해보는것도 재밌을것 같다.

 

코드를 순환하면서 union으로 같은 영역을 합치고 그 합쳐진 영역에서 [불일치]셀이 있는지 확인 후 있다면 노란색 음영을 칠하는 코드이다.

 

기초방 59번 문제도 기대바란다.

 

 

기초방58.xlsm
0.02MB

댓글