ic


우리가 몰랐던, 아니 자주 사용하지 않던 데이터구조체 EXCEL/VBA

vba에서 자주 사용하는 데이터구조체는 배열, 딕셔너리, 컬렉션 등이다. 하지만 너무 단순한 것들이라 가끔 불편하지만, 익숙해서 그냥 쓰고 있다. 간만에 vba에서 큐, 스택 같은 구닥다리부터 최신식 구조체(사실 Object Container) 몇 가지를 해시테이블만 빼고 대거 방출하고자 한다.
해시테이블 예제를 만들려니 왕귀찬...
Sub demoArrayList() 
Dim arrList As Object
Dim item

'Create the ArrayList
Set arrList = CreateObject("System.Collections.ArrayList")

arrList.Add "Hello"
arrList.Add "You"
arrList.Add "There"
arrList.Add "Man"
arrList.Remove "Man"

'Get number of items
Debug.Print arrList.Count 'Result: 3

For Each item In arrList
Debug.Print item
Next

End Sub

Sub demoSortedList()
Dim sortedList As Object

' Create the SortedList
Set sortedList = CreateObject("System.Collections.SortedList")

sortedList.Add "ThisortedListrd", "!"
sortedList.Add "Second", "World"
sortedList.Add "First", "Hello"

' Displays the properties and values of the SortedList.
Debug.Print "Count:"; sortedList.Count
Debug.Print "Capacity:"; sortedList.Capacity

Dim i As Long

For i = 0 To sortedList.Count - 1
Debug.Print sortedList.GetKey(i), sortedList.GetByIndex(i)
Next
End Sub

Sub demoQueue()
Dim queue As Object
Dim peekAtFirst, doesContain, firstInQueue

'Create the Queue
Set queue = CreateObject("System.Collections.Queue")

queue.Enqueue "Hello"
queue.Enqueue "There"
queue.Enqueue "Mr"
queue.Enqueue "Smith"

peekAtFirst = queue.Peek() 'Result" "Hello"
Debug.Print peekAtFirst

doesContain = queue.Contains("htrh") 'Result: False
Debug.Print doesContain

doesContain = queue.Contains("Hello") 'Result: True
Debug.Print doesContain

'Get first item in Queue and remove it from the Queue
firstInQueue = queue.Dequeue() '"Hello"
Debug.Print firstInQueue

'Count items
Debug.Print queue.Count 'Result: 3

'Clear the Queue
queue.Clear

Set queue = Nothing
End Sub

Sub demoStack()
Dim stack As Object
Dim peekAtTopOfStack, doesContain, topStack

'Create Stack
Set stack = CreateObject("System.Collections.Stack")

stack.Push "Hello"
stack.Push "There"
stack.Push "Mr"
stack.Push "Smith"

peekAtTopOfStack = stack.Peek()
Debug.Print peekAtTopOfStack

doesContain = stack.Contains("htrh") 'Result: False
Debug.Print doesContain

doesContain = stack.Contains("Hello") 'Result: True
Debug.Print doesContain

'Get item from the top of the stack (LIFO)
topStack = stack.Pop() 'Result: "Smith"
Debug.Print topStack

'Clear the Stack
stack.Clear

Set stack = Nothing
End Sub
[참고]MSDN-Early Binding이 아니라서(못해서) VBE에서 편리하게 클래스의 멤버함수나 속성을 알 수 없으니 MSDN을 참조해가며 익히는 게 좋을 것이다.
1. ArrayList
2. SortedList
3. Hashtable
4. Stack
5. Queue

덧글

  • 우와 2018/04/19 00:33 # 삭제 답글

    이정도만 봐도 저는 완전 신세계였습니다
    고작 regexp dictionary정도만 만졌는데. 정보 감사합니다
  • 타임버드 2018/04/22 19:20 #

    그 정도 하셨다면 고급수준이네요
댓글 입력 영역