딕셔너리를 두고 자꾸 왜 뻘짓을 하는지...
딕셔너리를 대체하는 배열을 만들어 보았다...
데이터가 많으면 컴이 뻗어 버린다....
딕셔너리 열심히 하자...
Option Explicit
Sub Haja_딕셔너리_대체()
Dim vall: vall = Range([c3], [c3].End(2).End(4)) '= 영역설정
Dim Va, Vresult() '= 결과 배열과 개체순환배열
Dim Str '= 배열의 index 위치값
Dim n&, i&, r&: r = 1 '= 결과 배열과 전체배열의 반복 변수
Dim Cmax&: Cmax = 2 '= 결과 배열의 전체 열너비 크기
[j2].CurrentRegion.Clear '= 초기화
ReDim Vresult(1 To UBound(vall, 1), 1 To 2) '= 결과 배열을 임시로 크기를 잡음
For Each Va In Application.Index(vall, , 1) '= 전체 배열을 순환
Str = Application.Match(Va, Application.Index(Vresult, , 1), 0) '= 결과 배열에서 개체배열을 찾아라
If TypeName(Str) = "Error" Then '= 찾은 값이 없다면 / 에러가 난다면
n = n + 1 '= N값을 +1
Vresult(n, 1) = Va '= 결과 배열의 key값에 Va를 넣고
Vresult(n, 2) = vall(r, 2) '= Item값에 배열의 두번째 값을 넣어라
Else '= 찾는 값이 결과 배열에 있다면 / 에러가 안 난다면
For i = 2 To UBound(Vresult, 1) '= 전체길이를 순환해라
If Cmax < i Then '= Cmax 보다 i값이 크다면 / 열 너비가 업데이트 된다면
Cmax = i '= Cmax 에 해당 i값을 넣어라
ReDim Preserve Vresult(1 To UBound(vall, 1), 1 To Cmax) '= 열너비를 증가해라
End If
If Vresult(Str, i) = Empty Then '= 배열의 열방향으로 비교하다가 비어있는 자리에
Vresult(Str, i) = vall(r, 2) '= 신규값을 업데이트해라
Exit For
End If
Next i
End If
r = r + 1
Next Va
Call haja_header(Cmax) '= 헤더값 표시
[j3].Resize(n, Cmax) = Vresult '= 결과값을 출력해라
With Range([j2], [j2].End(2))
.Font.Bold = True
.Interior.Color = 15983321
End With
With Range("j2").CurrentRegion
.HorizontalAlignment = xlCenter
.Borders.LineStyle = 1
End With
End Sub
Sub haja_header(Cmax&)
Dim i&
[j2] = "지역"
For i = 1 To Cmax - 1
Cells(2, i + 10) = "값" & i
Next i
End Sub
'VBA' 카테고리의 다른 글
[VBA] 주문자별 상품별로 분류하기(Feat. 정규식) (0) | 2022.04.10 |
---|---|
[VBA] VAT유저폼(feat. 인천_89_회계_가나) (2) | 2022.04.10 |
[VBA] ArrayList 로 배열 고유값과 중복 횟수 구하기 (0) | 2022.04.08 |
[VBA] 배열을 정렬해라(feat. 버블정렬) (0) | 2022.04.06 |
[VBA] 배열내 중복된 값들을 도출하고 중복값을 구해라 (7) | 2022.04.06 |
댓글