본문 바로가기
VBA

[VBA_Dictionary] 데이터 재배치

by 일등미노왕국 2021. 8. 10.

앞서 SELECT CASE를 통해 데이터 재배치를 해보았다. 먼저도 언급했지만 SELECT CASE는 고유값이나 선택 구간들이 조금이라도 늘어난다면 그 늘어난 구간만큼 코드들을 더 나열해야 함으로 반 하드코딩이라고 해도 과언이 아니다.

고유값을 도출하고 그 값에 따른 재가공이 필요하다면 그냥 D.I.C.T.I.O.N.A.R.Y 쓰면 된다.
잘 모르겠으면 그냥 외우길 추천한다. 한번 외우고 사용하는게 당신의 생명연장 꿈을 이뤄줄 수 있다.

데이터 영역을 순환하며 순차적으로 딕셔너리 키값과 아이템값을 추가한다.

데이터 영역안에서 딕셔너리의 키값과 아이템값을 모두 도출하였다면 여전히 뜨거운 감자인 딕셔너리의 키값과 아이템을 우리가 보기 원하는 방향으로 행열변환을 해야하는 순간과 맞닿게 된다.

가장 빠르고 편한 것은 APPLICATION.TRANSPOSE로 키값과 아이템값을 한번에 행열변화 시킨 후, 아이템 값들을 나열하기 위해 사용하였던 콤마(,)나 다른 구분 기호들을 텍스트 나누기로 역시 한번에 재가공하여 결과 값을 도출하면 된다. 하지만 TRANSPOSE는 변환할 수 있는 행열길이가 한정되어 있으므로 본인은 즐겨하지 않는다.

본인이 자주 애용하는 코드는 아래 코드와 값이 기준점을 하나씩 증가하면서 키값과 아이템 값을 셀에 출력하면서 아이템값을 나열하기 위해 사용되었던 콤마(,)나 특수문자들을 SPLIT로 나누어서 1차원 배열에 담고 1차원 배열의 크기만큼 배열을 해당 영역에 출력하면서 딕셔너리의 키값들을 순환하며 작업한다.

rngX.next.resize(1, ubound(split_item)+1) = split_item
rngX.next -> rngX.offset(,1)과 같은 뜻이다.
resize(1,ubound(split_item)+1) -> split로 잘라준 배열은 1차원 배열이므로 행의 길이는 1 / 열의 크기는 1차원배열은 0부터 시작하므로 배열의 크기가 5라고 하면 0,1,2,3,4 이렇게 나오기 때문에 Ubound(split_item) -> 1차원배열의 최대값인 4가 나오므로 +1을 더해줘서 배열의 출력범위를 잡아준다.

머리가 복잡하고 포기하고 싶은가...

본인도 했다. 그냥 외우자 일단

한글기준재배치(20.11.12).xlsm
0.03MB

댓글