기초방 64번 문제에 필터링까지 발전한 문제이다.
처음에 의도한건 Filter함수로 해결하는 의도였지만, 엑셀 2021버전이상 가능한 함수여서 고급필터와 정렬함수로 해결하였다.
더보기
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngAll As Range: Set rngAll = [e5].CurrentRegion
Dim rngA As Range: Set rngA = [k6:m6]
Dim rngX As Range
Dim i&
If Intersect(Target, [k6:m6]) Is Nothing Then Exit Sub
For i = 1 To 3
Validation rngA.Item(i) '= 유횽성검사 호출
Next i
Set rngX = [k8].CurrentRegion.Offset(1): rngX.Clear
rngAll.AdvancedFilter xlFilterCopy, [k5:m6], [k8:n8], False '= 고급필터
Range([n8], [n8].End(4)).Sort [n9], 1, Header:=xlYes '= 정렬
End Sub
Sub Validation(rngX As Range)
Dim rngV As Range
Dim V
Dim rngE As Range: Set rngE = Range([e6], [e6].End(4))
Set rngV = Range(rngX(1, -5), rngX(1, -5).End(4))
V = Application.Sort(Application.Unique(rngV))
V = Join(Application.Transpose(V), ",")
With rngX.Validation
.Delete
.Add xlValidateList, Formula1:=V
End With
[n6] = Application.SumIfs(Range([h6], [h6].End(4)), rngE, [k6], rngE.Offset(, 1), [l6], rngE.Offset(, 2), [m6])
End Sub
=SORT(FILTER($E$6:$H$10757,
($E$6:$E$10757=K6)*($F$6:$F$10757=L6)*($G$6:$G$10757=M6),
"없음"),
4,
1)
이렇게 함수식으로도 가능하다...물론 2021버전 이상부터
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #67 [ 테이블 요약하기 ] (0) | 2023.10.01 |
---|---|
[기초방] VBA 100제 #66 [ 문자열 정렬하기(feat. 배열정렬) ] (0) | 2023.09.21 |
[기초방] VBA 100제 #64 [ 유효성 검사를 통한 총 수량 구하기 ] (0) | 2023.09.19 |
[기초방] VBA 100제 #63 [ X축, Y축 최대 최소값 구하기 ] (0) | 2023.09.19 |
[기초방] VBA 100제 #62 [ 홀수_짝수차 구별하기 ] (0) | 2023.09.18 |
댓글