시트 내용을 Dictionary로 변환하는 명령문 :: Get_Dict 함수

시트 안에 입력된 데이터를 Dicationary 개체로 변환하는 Get_Dict 함수의 동작원리 및 사용법을 살펴봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 04. 11. 18:42
URL 복사
메모 남기기 : (1)

시트 내용을 Dictionary로 변환 :: Get_Dict 명령문 사용법

엑셀 Get_Dict 명령문 목차 바로가기
요약

엑셀 Get_Dict 함수는 시트 안에 입력된 데이터를 Dictionary 개체로 변환하는 사용자지정함수입니다.
시트 안에 입력된 데이터는 반드시 "A1"셀에서 시작되고 첫번째 필드는 고유값(ID)가 입력되어야 합니다.

명령문 구문
Dictionary = Get_Dict 시트
사용된 인수 및 변수 알아보기
인수 설명
시트
[WorkSheet]
Dictionary 개체로 변환할 시트입니다. 시트 안에 입력된 데이터는 반드시 A1 셀부터 시작되고, 데이터의 첫번째 필드는 반드시 고유값(ID)이 입력되어야 합니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


상세 설명

엑셀 Get_Dict 함수는 시트 안에 입력된 데이터를 Dictionary 개체로 변환하는 사용자지정함수입니다. 시트의 데이터는 A1 셀에서 시작, 첫번째 필드는 고유값이 입력되어야 합니다. Dictionary 개체는 VBA에서 기본으로 활성화되지 않으므로, Early Binding으로 Dictionary를 사용하려면 Microsoft Scripting Runtime 라이브러리를 활성화 합니다.

엑셀 Dictionary 개체 활성화
VBA 편집기 - 도구 - 참조 에서 Scripting RunTime 라이브러리를 활성화합니다.

또는 Microsoft Scripting Runtime 라이브러리를 활성화하지 않고, CreateObject("Scripting.Dictionary") 로 Dictionary 개체를 선언하여 사용할 수도 있습니다. 하지만 Late Binding 으로 사용할 경우 명령문 작성시 개체의 속성과 함수가 자동으로 완성되지 않는 것에 주의해서 사용합니다.

Dictionary 속성 자동 완성 안됨
LateBinding 할 경우 속성, 함수가 자동완성되지 않습니다.
실전 사용 예제
  1. 특정 시트의 모든 데이터를 Dictionary 개체로 변환
    Dim Dict As Object
    Set Dict = Get_Dict(ThisWorkbook.Worksheets("시트명"))
  2. 시트 내용을 Dictionary로 변환 후, 특정 ID 에 해당하는 데이터를 배열로 반환
    Dim Dict As Object
    Dim vArr As Variant
    Set Dict = Get_Dict(ThisWorkbook.Worksheets("시트명"))
    vArr = Dict(ID)

시트 내용을 Dictionary로 변환, Get_Dict 명령문 동작원리

Get_Dict 명령문 전체 코드
Function Get_Dict(WS As Worksheet) As Object
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'수정 및 배포 시 출처를 반드시 명시해야 합니다.
 
'■ Get_Dict 함수
'■ 시트에 입력된 데이터를 Dictionary로 반환합니다. 첫번째 필드는 반드시 고유값이 입력되어야 합니다.
'■ 사용방법
'Dictionary = Get_Dict(시트)
'■ 인수 설명
'_____________WS            : Dictionary로 변환할 시트입니다.
'###############################################################
Dim cRow As Long: Dim cCol As Long
Dim Dict As Object
Dim vArr As Variant
Dim i As Long: Dim j As Long
 
Set Dict = CreateObject("Scripting.Dictionary")
 
With WS
 
    cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    cCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
 
    For i = 1 To cRow
        ReDim vArr(1 To cCol - 1)
        For j = 2 To cCol
            vArr(j - 1) = .Cells(i, j)
        Next
        Dict.Add .Cells(i, 1).Value, vArr
    Next
End With
 
Set Get_Dict = Dict
 
End Function
명령문 동작원리 단계별 알아보기
  1. 변수 선언 및 Dictionary 개체 설정
    Dim cRow As Long: Dim cCol As Long
    Dim Dict As Object
    Dim vArr As Variant
    Dim i As Long: Dim j As Long
     
    Set Dict = CreateObject("Scripting.Dictionary")
  2. 시트에서 사용중인 데이터의 마지막 행/열 번호 반환
    With WS
     
        cRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        cCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
  3. 첫번째필드는 Dictionary의 Key(=ID), 나머지 필드는 배열 형태로 Dictionary 값에 추가
        For i = 1 To cRow
            ReDim vArr(1 To cCol - 1)
            For j = 2 To cCol
                vArr(j - 1) = .Cells(i, j)
            Next
            Dict.Add .Cells(i, 1).Value, vArr
        Next
    End With
  4. Get_Dict 함수 결과값으로 Dictionary 반환 후 함수 종료
    Set Get_Dict = Dict
5 1 투표
게시글평점
1 댓글
Inline Feedbacks
모든 댓글 보기
1
0
여러분의 생각을 댓글로 남겨주세요.x