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
Reference
이 문제에 관하여(Excel VBA에서 사용할 수 있는 가변 길이 컬렉션 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/minoru-nagasawa/items/fcd317fa58c2372f681d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
※ 일부에서 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
Reference
이 문제에 관하여(Excel VBA에서 사용할 수 있는 가변 길이 컬렉션 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/minoru-nagasawa/items/fcd317fa58c2372f681d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Reference
이 문제에 관하여(Excel VBA에서 사용할 수 있는 가변 길이 컬렉션 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/minoru-nagasawa/items/fcd317fa58c2372f681d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)