기초방 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
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #61 [ 사진 정보 가져오기 ] (2) | 2023.09.15 |
---|---|
[기초방] VBA 100제 #60 [ 불일치 / 일치 같은 영역 색칠하기 ] (0) | 2023.09.15 |
[기초방] VBA 100제 #58 [ 불일치 영역 색칠하기 ] (0) | 2023.07.11 |
[기초방] VBA 100제 #57 [ 영역 합계구하기 ] (0) | 2023.07.07 |
[기초방] VBA 100제 #56 [ 문자열 조합 + 정렬하기 ] (0) | 2023.07.07 |
댓글