본문 바로가기
VBA

[VBA_merge] 같은 연번 부분합 구하기

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

같은 연번내애서 같은성명부분합구하기(21.08
0.03MB

엑셀을 조금이라도 다룰 줄 아시는 분이라면 병합 셀로 자료를 만드는 것이 얼마나 위험(?)하고 관리하기 힘든지 아시리라 본다. 허나 병합 셀을 즐기는 엑찔이가 우리 주위에는 너무나도 많기에 엑사남인 우리는 배울 필요도 없는 이 엑셀에서의 병합된 셀을 다루는 방법을 배워야 한다.

문제는 이렇다. 같은 연번 내에 같은 성명이 들어간 경우 중복된 성명은 제거하고 대신 점수만 합산하는 문제이다. 마지막에는 같은 연번은 하나로 병합해야 해야하는 정말 다음 어떤 작업을 할지 모르겠지만 내일이 없는 작업이다.

연번과 성명 점수로 되어있는 데이터 테이블
중복된 이름은 점수 합산만 하여 연번을 병합하였다.


이번 문제를 해결하기 위해서
1. SpecialCells가 사용되었다.

상수 내장상수
4 xlLogical 빈셀만 선택
2 xlTextValues 공백을 제외한 숫자,문자 선택
1 xlNumbers 숫자선택

rngAll.Columns(1).SpecailCells(2) : rngAll의 영역에서 첫번째 열중 데이터가 있는 영역이라는 뜻이다.

2. 현재 선언했던 rngX를 파라미터로 조건에 따라 하위프로시저인 [병합하기(rngX)]로 넘겼다.

3. 하위 프로시저인 [병합하기]에서 딕셔너리를 후기 바인딩으로 선언하였다.
딕셔너리는 중복값을 제거하면서 다음 단계를 진행하기에 너무나 유용한 코드이다.
딕셔너리의 아이템값(점수)를 더하기 위해 Long으로 딕셔너리의 아이템을 선언하였다. 실수 없기를...

4. intersect로 영역의 교집합을 사용하였다. 이 부분은 주석을 통해 자세하게 서술하였기에 읽어보기를 바라며, 이해가 안 간다면 intersect부분을 없애고 Set tempAll = rngX.resize((rngX.end(4).row-rngX.row),3) 로 해보면 마지막 연번을 실행할때쯤 마지막 행이 안드로메다로 가 있는걸 확인할 수 있다..굳이 보고 싶다면 일단 저장을 하고 덤벼보시길...

댓글