고유값을 Pivot 하는 문제이다.
이문제의 관건은 담당자의 고유값을 세로에서 가로로 뿌린 후 FILER함수를 이용하여 값을 구할 수 있느냐에 있다.
통상 FILTER함수는
= FILTER(배열, 조건, [못찾을때])
이것을 VBA 식으로 표현하면
With Application
V = Application.Filter(rngAll.Columns(2), rngAll.Columns(1) = rngA, "not Found"))
rngA(2, 1).Resize(UBound(V, 1), 1) = V
End With
이렇게 하면 될것 같지만 해당되지 않는다.
FILTER함수의 부분일치값을 가져오는 ISNUMBER + SEARCH 조합으로 구하면 해결된다.
For Each rngA In rngF
With Application
V = Application.Filter(rngAll.Columns(2), .IsNumber(.Search(rngA, rngAll.Columns(1))))
rngA(2, 1).Resize(UBound(V, 1), 1) = V
End With
Next rngA
안그러면 영역을 다중 FOR문으로 돌거나 FIND를 하여 찾아 나가야 하는데, 이러한 건 기존에 많이 했기 때문에 본인의 포스팅을 찾아보길 바란다.
더보기
Option Explicit
Sub 기초방77()
Dim rngAll As Range: Set rngAll = [a4:b49]
Dim rngX As Range: Set rngX = [f12]
Dim rngF As Range
Dim rngA As Range
Dim vtemp, V
[f13:t100].ClearContents
vtemp = Application.Unique(rngAll.Columns(1))
rngX.Resize(1, UBound(vtemp, 1)) = Application.Transpose(vtemp)
Set rngF = [f12].CurrentRegion
For Each rngA In rngF
With Application
V = Application.Filter(rngAll.Columns(2), .IsNumber(.Search(rngA, rngAll.Columns(1))))
rngA(2, 1).Resize(UBound(V, 1), 1) = V
End With
Next rngA
End Sub
365 함수에 관한 설명은 우노사설님 채널에서 확인해보길 바란다.
https://www.youtube.com/watch?v=0-0H_hIhVBk&ab_channel=%EC%9A%B0%EB%85%B8%EC%82%AC%EC%84%A4
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #79 [ 로또번호 정렬하기 ] (2) | 2023.10.19 |
---|---|
[기초방] VBA 100제 #78 [ 열선택하여 조건에 맞는값 출력 ] (2) | 2023.10.19 |
[기초방] VBA 100제 #76 [ 상위랭커 구하기 ] (0) | 2023.10.17 |
[기초방] VBA 100제 #75 [ 필터링 구현하기 ] (0) | 2023.10.16 |
[기초방] VBA 100제 #74 [ 품목의 계절별 단가 구하기 ] (0) | 2023.10.13 |
댓글