Excel VBA에서 사용할 수 있는 가변 길이 컬렉션 요약

개요



Excel VBA에는 Collection이라는 가변 길이 컬렉션이 내장되어 있습니다.
게다가 .NET Framework 컬렉션도 사용할 수 있습니다.
각각 미묘하게 다르기 때문에 정리했습니다.

목록



※ 일부에서 Debug.Print를 사용한 예를 보여줍니다.



컬렉션
Dictionary
ArrayList
SortedList


생성
Dim c As CollectionSet c = New Collection
Dim dictSet dict = CreateObject("Scripting.Dictionary")
Dim arrayListSet arrayList = CreateObject("System.Collections.ArrayList")
Dim sortedListSet sortedList = CreateObject("System.Collections.SortedList")

추가
Call c.Add("Value1", "Key1")
' 참고: Collection 과 순서가 다른 Call dict.Add("Key1", "Value1")
Call arrayList.Add("Value1")
' 참고: Collection 과 순서가 다른 Call sortedList.Add("Key1", "Value1")

참조 (by 인덱스)
'1 시작 c.Item (1)
'0 시작 dicta.Items () (0)
'0 시작 arrayList.Item (0)
'0 시작 SortedList.GetByIndex (0)

참조 (by 키)
c.Item("Key1")
dict.Item("Key1")
없음
sortedList.GetByIndex(sortedList.IndexOfKey("Key1"))

키 참조
없음
'0 시작 dicta.Keys () (0)
없음
'0 시작 SortedList.GetKey (0)

삭제(by 인덱스)
'1 시작 Call c.Remove (1)
'0 시작 Call dict.Remove (dict.Keys () (0))
'0 시작 Call arrayList.RemoveAt (0)
'0 시작 Call sortedList.RemoveAt (0)

삭제(by 키)
Call c.Remove("Key1")
Call dict.Remove("Key1")
없음
Call sortedList.Remove("Key1")

요소 수
c.Count
dict.Count
arrayList.Count
sortedList.Count

For(모든 키)
없음
Dim tmpKeyFor Each tmpKey In dict.Keys    Debug.Print tmpKeyNext
없음
Dim i As LongFor i = 0 To sortedList.Count - 1    Debug.Print sortedList.GetKey(i)Next

For(모든Value)
Dim tmpFor Each tmp in c    Debug.Print tmpNext
Dim tmpValueFor Each tmpValue In dict.Items    Debug.Print tmpValueNext
Dim tmpFor Each tmp In arrayList     Debug.Print tmpNext
Dim i As LongFor i = 0 To sortedList.Count - 1    Debug.Print sortedList.GetByIndex(i)Next

키 존재 확인
' 無いけど欲しいので自作Function ExistsCollection(ByRef c As Collection, ByRef key) As Boolean    On Error Resume Next    Call c.Item(key)    If Err.Number <> 0 Then        ExistsCollection = False    Else        ExistsCollection = True    End If    On Error GoTo 0End Function' 사용법ExistsCollection(c, "Key1")
dict.Exists("Key1")
없음
sortedList.ContainsKey("Key1")

값 존재 확인
없음
없음
arrayList.Contains("Value1")
sortedList.ContainsValue("Value1")

모두 삭제
'전 삭제는 없기 때문에 신규 작성한다. '다른 참조 사본을 가지고 있다면, 그곳은 지워지지 않습니다. Set c = New Collection
dict.RemoveAll
arrayList.Clear
sortedList.Clear


비고



CreateObject에서
"런타임 오류 '-2146232576(80131700)': 자동화 오류입니다."
오류가 발생할 수 있습니다.


이 경우 Windows 기능 활성화 또는 비활성화에서 .NET Framework 3.5(.NET 2.0 및 3.0 포함)를 활성화합니다.


링크



Dictionary: https://msdn.microsoft.com/ko-kr/library/cc428065.aspx
ArrayList : https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.arraylist?view=netframework-4.7.2
SortedList: https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.sortedlist

좋은 웹페이지 즐겨찾기