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

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

by 일등미노왕국 2023. 8. 1.

기초방 58번에서 언급했듯. 59번 코드가 정석이다.

이유는 58은 성명이 하나인 곳에서 에러를 발생할 것이며, 속도 또한 59번보다 느릴것이다.

영역을 순환하는 것보다. find로 바로 바로 찍어서 영역을 합치기 때문에 데이터 양이 많다면 분명 더 효과적일것이다.'

 

haja_find 함수의 find구문은 일정부분 루틴이 있는 것이기 때문에 반드시 기억하길 바란다.

더보기
Option Explicit
Sub 기초방59()

    Dim rngAll As Range: Set rngAll = [m5:s25]
    Dim rngA As Range, rngC As Range
    Dim strFind$
    
    For Each rngC In rngAll.Columns
    
        For Each rngA In rngC.Cells
        
            If rngA = "불일치" And rngA.Interior.ColorIndex <> 6 Then '불일치면서 노란색이 아닌곳만
            
                strFind = Cells(rngA.Row, "l")  '= 불일치면서 노란색이 아닌곳의 성명을 찾음
                
                haja_find rngA, strFind         '= 찾은 성명을 모두 찾기 위해서 haja_find 호출
            End If
        
        Next rngA
    
    Next rngC

End Sub

Sub haja_find(rngA As Range, str$)
    
    Dim rngC As Range
    Dim rngU As Range
    Dim strAddr$

    With [l5:l25]                                           '= 성명부분
        Set rngC = .Find(what:=str, lookat:=xlPart)
            If Not rngC Is Nothing Then
                strAddr = rngC.Address
                If rngU Is Nothing Then
                    Set rngU = Cells(rngC.Row, rngA.Column) '= 해당 성명부분을 rngU로 합침(처음)
                End If
               
                Do
                    Set rngC = .FindNext(rngC)
                    Set rngU = Union(rngU, Cells(rngC.Row, rngA.Column)) '= 해당 성명부분을 rngU로 합침(누적)
                Loop While Not rngC Is Nothing And strAddr <> rngC.Address
                
            End If
       
        
    End With
    
    rngU.Interior.ColorIndex = 6


End Sub

기초방59.xlsm
0.02MB

댓글