고유목록 추출
A열의 목록에서 '고유목록'을 추출하여,
B열에 있는 값들 중 '고유목록'에 해당하는 값들의 합계를 구해서 넣는 것으로
SUMIF함수를 이용하여 값을 구할 수 있다.
고유목록은 New Collection객체를 이용하여 추출할 수 있어서 For Each ~ Next문으로 Add매서드를 이용하여 구할 수 있다.
(New Collection객체는 중복된 항목을 제거하고 고유의 항목만 가지게 하는 객체로서
고유한 목록을 추가해 주는 Add매서드를 반드시 이용하여 작업해야 함)
New Collection객체의 변수 sj에 Add매서드를 이용하여, 공백제거된 문자화된 고유의 목록만 저장
sj.Add Trim(r),CStr(Trim(r))
'-----코드 시작
Dim sj As New Collection
Dim r As Range
Dim k As Long
On Error Resume Next '중복된 값이 있으면 에러를 발생시킴으로 에러가 나면 그냥 넘어가라
For Each r in Range("A2:A21")
sj.Add Trim(r),CStr(Trim(r)) '고유항목만 뽑아서 공백을 제거하고, 텍스트화
Next
On Error Goto
'-----코드 끝
sj에 저장된 고유의 목록을 k변수의 순서에 따라 For문에 넣어 반복하고, 목록과 값이 들어갈 셀에 넣어주면 됨
(합계를 구하는 함수는 sumif을 이용하여 구해서 넣어줌)
'----코드 시작
For k = 1 to sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Application.Sumif(Range("A2:A21"),sj(k),Range("B2:B21")
Next
'-----코드 끝
Range("A2:A21")와 Range("B2:B21")을 변수처리하여 문장을 조금 더 간단하게 만들어 주어도 될 것 같네요
'----코드 시작-
Dim tk As Range, kr As Range
Set tk = Range("A2:A21")
Set kr = Range("B2:B21")
For k = 1 To sj.count
Cells(k+1,"d") = sj(k)
Cells(k+1,"e") = Applcation.Sumif(tk,sj(k),kr)
Next
'-----코드 끝
https://blog.naver.com/romyok12/222930690848
'엑셀로 풀어가는 세상' 카테고리의 다른 글
vba - resize2 (0) | 2023.08.31 |
---|---|
vba - resize1 (0) | 2023.08.31 |
vba - Scripting.Dictionary (0) | 2023.08.30 |
엑셀 - 두 가지 조건 만족하는 셀의 개수 계산 (0) | 2023.08.26 |
vba - Array(배열)1 (0) | 2023.08.22 |
VBA - 중복값 제거(New Collection) (0) | 2023.08.21 |
엑셀 - 시트이름을 셀에 불러오기 (0) | 2022.09.21 |
엑셀 - 여러개의 시트 중 이름만 추출하기 (0) | 2022.09.18 |