Variant
型の変数に配列を代入すると、配列として普通に使えるようになり ます
配列の使い方 固定配列
動的配列
コレクションの使い方今日の目的
異なる型やオブジェクトを格納できる
各要素の追加、削除が容易
連想配列としても使用できるコレクション
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim vData As Variant For Each vData In cll
Debug.Print TypeName(vData) & ":" & vData Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
バリアント型に一端格納しない パターンの例
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Call cll.add(“ゆっくりしていってね”, Before:=1 ) Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
Before:=x
とすることで要素xの前に新しい要 素を追加する
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Call cll.add(“ゆっくりしていってね”, Before:=1 ) Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Call cll.add(“ゆっくりしていってね”, After:=1 ) Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
After:=x
とすることで要素xの後に新しい要 素を追加する
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1))
Call cll.add(“ゆっくりしていってね”, After:=1 ) Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1)) Call cll.Remove( 1 )
Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
Remove
メソッドを使用することで指定の要素を削除できる
Dim cll As New Collection
Call cll.add("オプーナ")
Call cll.add(#1/3/2008 3:32:00 AM#) Call cll.add(23432&)
Call cll.add(Sheet1.Cells(1, 1)) Call cll.Remove( 1 )
Dim i As Long
For i = 1 To cll.Count
Debug.Print TypeName(cll.Item(i)) & ":" & cll.Item(i) Next
Set cll = Nothing
String
型の一意のキーを指定して効果発動
プログラマはキーを元にデータの取得、削除ができ る連想配列
Dim cll As New Collection Call cll.add("カイジ", "顎") Debug.Print cll.Item("顎") Set cll = Nothing
Dim cll As New Collection Call cll.add("カイジ", "顎")
Call cll.add(“アカギ”, “倍プッシュ", before:="顎") Set cll = Nothing
Dim cll As New Collection Call cll.add("カイジ", "顎")
Call cll.add(“アカギ”, “倍プッシュ", before:="顎") Call cll.add(“黒沢”, “最強”, after:=“倍プッシュ") Set cll = Nothing
Dim cll As New Collection Call cll.add("カイジ", "顎")
Call cll.add(“アカギ”, “倍プッシュ", before:="顎") Call cll.add(“黒沢”, “最強”, after:=“倍プッシュ")
Call cll.Remove("最強") Set cll = Nothing
String
型の一意のキーを指定して効果発動
プログラマはキーを元にデータの取得、削除ができ る連想配列
Private Function HasCollectionKey(ByRef cll As Collection, _ ByVal keyName As String) As Boolean
On Error GoTo ErrCatch Dim lRet As Long
lRet = VarType(cll.Item(keyName)) HasCollectionKey = True
Exit Function
ErrCatch:
If err.Number <> 5 Then
err.Raise err.Number, err.Source, err.Description, _ err.HelpFile,err.HelpContext
Exit Function End If
HasCollectionKey = False End Function
キーの存在チェック
Private Function HasCollectionKey(ByRef cll As Collection, _ ByVal keyName As String) As Boolean
On Error GoTo ErrCatch Dim lRet As Long
lRet = VarType(cll.Item(keyName)) HasCollectionKey = True
Exit Function
ErrCatch:
If err.Number <> 5 Then
err.Raise err.Number, err.Source, err.Description, _ err.HelpFile,err.HelpContext
Exit Function End If
HasCollectionKey = False End Function
キーの存在チェック
Public Sub TestHasCollectionKey() Dim cll As New Collection
' キーのチェック
Call cll.add("アカギ", "倍プッシュ")
Debug.Print "Trueのはず;" & HasCollectionKey(cll, "倍プッ シュ")
Debug.Print "Falseのはず;" & HasCollectionKey(cll, "最強")
' オブジェクトも検索可能
Call cll.add(Sheet1, "シート1")
Debug.Print "Trueのはず;" & HasCollectionKey(cll, "シート1
")
Debug.Print "Falseのはず;" & HasCollectionKey(cll, "シート2
")
Set cll = Nothing End Sub
ExcelVBA006.xlsm
の標準モジュール mdlArraySample
配列のサンプルプログラム
mdlCollectionSample
コレクションのサンプルプログラム