EXCEL VBA

엑셀 VBA UNIQUE 함수와 유사한 기능을 하는 사용자 정의 함수 만들기

카루루1007 2024. 8. 21. 18:27
728x90
반응형

오늘은 Excel에서 데이터를 다루는 데 도움이 되는 사용자 정의 함수를 하나 만들어 보겠습니다.

이 함수는 엑셀 365에서 지원하는 Unique 함수 기능 중에

중복값을 제외한 고유한 값을 추출하는 기능을 구현해 보았습니다.

 

이 함수는 특정 범위에서 중복을 제거하고

고유한 값을 가로 또는 세로 방향으로 출력할 수 있습니다.

 

 주 요 기 능

 

1. 고유 값 추출 : 중복된 값을 제거하고 고유한 값만 출력합니다.

2. 출력 방향 선택 가능 : 출력 방향을 세로(기본값) 또는 가로로 설정할 수 있습니다.

 

728x90

 전 체 코 드

 

전체코드는 다음과 같습니다.

Function MyUnique(rng As Range, Optional orientation As Long = 1) As Variant
    Dim dict As Object
    Dim cell As Range
    Dim i As Long

    Set dict = CreateObject("Scripting.Dictionary")
    
    For Each cell In rng
        If cell.Value <> "" Then
            dict(cell.Value) = ""
        End If
    Next cell

    If orientation = 1 Then
        MyUnique = Application.Transpose(dict.Keys)
    ElseIf orientation = 2 Then
        MyUnique = dict.Keys
    End If
End Function

 

 사 용 방 법

 

1. Excel 파일을 열고 Alt + F11을 눌러 VBA 편집기를 실행합니다.

2. 메뉴에서 삽입모듈을 클릭하여 새 모듈을 추가합니다.

3. 위 코드를 복사해서 붙여넣습니다.

4. 엑셀 시트에서 함수를 호출합니다.

=MyUnique(A1:A10) : 고유한 값들이 세로 방향으로 출력됩니다.

=MyUnique(A1:A10, 2) : 고유한 값들이 가로 방향으로 출력됩니다.

 

반응형

 코 드 분 석

 

 

Set dict = CreateObject("Scripting.Dictionary")

VBA에서 Dictionary를 사용할 수 있게 합니다.

딕셔너리(Dictionary)에 대한 설명은 앞선 블로그를 참고하시면 됩니다.

[EXCEL VBA] 엑셀 VBA에서 Dictionary 사용하기

 

For Each cell In rng
    If cell.Value <> "" Then
        dict(cell.Value) = ""
    End If
Next cell

함수를 호출할 때 받은 범위의 셀 값을 딕셔너리의 키로 만들어 줍니다.

앞선 블로그에서 딕셔너리의 키는 고유한 값을 가진다고 했습니다.

기존의 키와 동일한 값이 들어갈 수가 없습니다.

단, 셀 값이 비어있을 경우는 제외합니다.

 

그리고 셀에 입력된 값을 딕셔너리의 키로 만든 후 딕셔너리의 값은 공백으로 정해줍니다.

값을 공백으로 정하는 것은 이 코드에서 큰 의미는 없습니다.

무엇으로 정하더라도 코드는 작동될 겁니다.

 

If orientation = 1 Then
    MyUnique = Application.Transpose(dict.Keys)
ElseIf orientation = 2 Then
    MyUnique = dict.Keys
End If

이 코드는 고윳값을 어느 방향으로 출력할지 결정해 줍니다.

인자를 입력하지 않거나, 1을 입력할 경우 세로 방향으로 출력합니다.

인자를 2를 입력할 경우 가로 방향으로 출력을 합니다.

 

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

 

728x90
반응형