-
VBA 중복데이터 합치기Excel/Excel 매크로 2023. 4. 27. 22:02728x90
포스트 목차.
본 포스트에서는 중복 데이터 중 특정 데이터를 합치면서, 중복데이터를 제거하는 예제 코드를 소개한다.
01. 중복데이터 합치는 문제아래와 같은 데이터가 있다고 가정하자.
식별번호가 일치할 경우 금액을 하나로 합쳐야되는 작업이다.
금액을 제외한 다른 데이터는 가장 처음에 등장하는 데이터 그대로 유지한다.
중복 데이터를 제거하면서, 금액은 하나로 합치는 작업을 해야한다.
02. Do While 문이 문제를 해결하기 위해서 이중 루프문을 사용하려고 한다.
첫번 째 루프에서는 비교대상1을 선택하고
두번 째 루프를 돌면서 배교대상1 외의 다른 데이터와의 식별번호를 비교해야한다.
식별번호가 일치할 경우 금액을 합치면 된다.
루프 문에 대해서는 위의 포스트를 참고하자.
논리의 흐름을 정리하면,
첫번째 루프:
비교대상1을 선정한다.
두번째 루프:
비교대상 1의 아래 행에 있는 비교대상 2를 선정 후
- 식별번호가 같은 경우 금액을 합한 후 비교대상2가 있는 행 전체를 삭제한다.
- 식별번호가 다른 경우 다음 행으로 이동하여 비교대상2를 다시 설정한다.
- 더이상 비교대상2로 설정할 데이터가 없으면 두 번째 루프를 끝낸다.
다음 비교대상 1을 선정한다.
더이상 비교대상1로 설정할 데이터가 없으면 첫 번째 루프를 끝낸다.
03. 행 삭제중복된 데이터가 있을 경우 첫번 째 행을 제외한 나머지 행을 삭제되어야 한다.
다음과 같은 명령을 수행하면, 해당 행 전체를 삭제할 수 있다.
Rows(행번호).EntireRow.Delete
위 명령은 행을 선택 후 마우스 우클릭 - 삭제를 선택한 것과 같으며,
셀을 선택 후 마우스 우클릭 - 삭제 행 전체를 선택한 것과 같다.
04. 예제123456789101112131415161718192021222324252627282930313233343536373839404142434445Sub 단추1_Click()'시작 행 설정i = 6'비교대상 1의 데이터가 있을때만 루프를 수행한다Do While Not ActiveSheet.Cells(i, 10).Value = ""'금액 (j열에 있는 값을 구한다.)Price = ActiveSheet.Cells(i, 10).Value'식별 번호를 저장한다.idNumber = ActiveSheet.Cells(i, 3).Value'비교대상 2는 i행 다음의 데이터로 설정한다.j = i + 1'비교대상2의 데이터가 있는 경우만 루프를 수행한다.Do While ActiveSheet.Cells(j, 10).Value <> ""'비교대상 2의 식별번호 저장idNumberTmp = ActiveSheet.Cells(j, 3).Value'비교대상1과 비교대상2의 식별번호가 일치할 경우If idNumber = idNumberTmp Then'비교대상2의 값을 구한다.PriceTmp = ActiveSheet.Cells(j, 10).Value'비교대상1의 값과 비교대상2의 값을 합한 값을 저장한다.Price = Price + PriceTmpActiveSheet.Rows(j).EntireRow.Delete'식별번호가 일치하지 않은 경우 다음 비교대상2를 설정한다.Elsej = j + 1End IfLoop'비교대상 1의 값을 설정한다.ActiveSheet.Cells(i, 10) = Price'다음 비교대상 1을 설정한다.i = i + 1LoopEnd Subcs 버튼을 하나 만들어서 위와 같은 매크로를 연결하자.
실행 후의 결과는 다음과 같다.
728x90'Excel > Excel 매크로' 카테고리의 다른 글
VBA로 동일한 형식의 보고서 여러 장을 만들어보자. (0) 2023.05.27 엑셀 VBA 셀의 너비와 높이 가져오기 , 셀의 너비와 높이 변경하기 (1) 2023.05.22 Excel 매크로 (VBA) - 023. 클래스 모듈 (간단한 예제) (0) 2022.11.09 Excel 매크로 (VBA) - 022. 로또 번호 생성기를 만들어 보자 (0) 2022.11.05 Excel 매크로 (VBA) - 021. 인풋박스 (InputBox) 사용 방법 (0) 2022.09.14