본문 바로가기
VBA

[VBA] 배열내 중복된 값들을 도출하고 중복값을 구해라

by 일등미노왕국 2022. 4. 6.

배열 또는 셀의 영역 데이터 중 고유값을 구하고 중복된 값을 구하는 것은 보통 딕셔너리로 구한다.

또는 어레이리스트나 컬렉션으로 구하는게 대부분이다.

본인의 VBA 뮤즈인 준빠님께서 질문을 올렸다.

고유값을 구하고 그 중복횟수를 구하는 것은 딕셔너리로 구해왔기 때문에 너무나 당연하게 나올 코드 말고 배열로만 그 고유값과 횟수를 구하라는 숙제이다.

 

배열로 구할 수 있는 방법은 소스 영역을 반복할 For문과 결과값에 추가하면서 그값이 기존 결과 배열에 있는지 확인하는 For문을 구하는 다중 For문을 이용해서 비교해가며 값을 추가해야 한다.

 

하지만 이렇게 되었을 경우 소스 영역이 많아지면 결과값에서 비교하는 자체로 시간이 소요가 된다.

순차적으로 For문을 타는 방식이 아닌 Find나 Search처럼 해당값을 바로 찾을 수 있는 코드가 필요하다.

 

이 문제는 배열내에서 값을 검색하는 다이렉트 방법이 있는지 유무를 알아야 한다.

정답은 있다..그것도 우리가 엑셀 함수로 많이 사용하는 Match함수이다.

 

엑셀 함수를 이용하는 방법은 worksheetfunction.match가 있고 application.match가 있다. 이 두 방식의 차이는

worksheetFunction 은 엑셀 수식방식이라서 이건 찾을 값이 없을 때 에러 메세지를 발생하며 매크로가 중단이 된다.

VBA에서 엑셀 함수를 이용하려면 반드시 Application으로 사용하여야 한다. Application으로 사용하였을 때 에러메세지는 나오지만 매크로가 중단되지 않기 때문에 우리가 원하는 값을 구할 수 있다.

 

 

배열내고유값및횟수구하기(22.04.06).xlsm
0.02MB

댓글