Collectionオブジェクトといえば、配列のようにインデックス番号と値とをセットで記憶します。登録した数を確認したり、値を追加したり値を表示するだけならどちらでも同じことができますがそれ以外は全く違うのでそこらへんに気をつけてメモ書きしておきます。
■宣言
■要素数を調べる<.Count>
Dim foo As Collection とした場合
Collectionオブジェクトを利用することができる変数の入れ物ができただけにすぎません。
Dim foo As New CollectionのようにNewを使うことで初めてCountが使えるようになります。
Dim foo As New Collectionと一行で表現しても
Dim foo As Collection 'この時点ではNothingの状態。
Set foo = New Collectionとニ行で表現しても一緒です。
■要素を追加する<.Add>
■要素を表示する<.Item([番号])> ※番号は、1以上
最初の要素が1になるので1以上の数値ということになります。
■要素の削除<.Remove([要素番号])>
dが4番⇒3番
eが5番⇒4番へかわっています。
初期化ではなく、取り除かれることに注意ですね。
うっかり偶数番目のデータだけ省いてしまおうと思ってこんなコードを書くとエラーになりますね
For文は、iが1から10になっら終了します。
i=2 i=4 i=6
================================
Item1:1 Item1:1 Item1:1
Item2:3 Item2:3 Item2:3
Item3:4 Item3:4 Item3:4
Item4:5 Item4:6 Item4:6
Item5:6 Item5:7 Item5:7
Item6:7 Item6:8 Item6:9
Item7:8 Item7:9 Item7:10
Item8:9 Item8:10
Item9:10
i=8
Item8がないのでエラーとなる。
どうせやるなら、小さい番号から処理をするのでなく、大きい番号から処理すべきですね。
i=10 i=8 i=6 i=4 i=2
========================================================
Item1:1 Item1:1 Item1:1 Item1:1 Item1:1
Item2:2 Item2:2 Item2:2 Item2:2 Item2:3
Item3:3 Item3:3 Item3:3 Item3:3 Item3:5
Item4:4 Item4:4 Item4:4 Item4:5 Item4:7
Item5:5 Item5:5 Item5:5 Item5:7 Item5:9
Item6:6 Item6:6 Item6:7 Item6:9
Item7:7 Item7:7 Item7:9
Item8:8 Item8:9
Item9:9
■宣言
Dim 変数名 As New Collectionと、宣言すると下記メソッドが使えるようになります。
■要素数を調べる<.Count>
Option Explicit Sub SampleCode() Dim foo As New Collection debug.print foo.Count '要素を追加していないので0を表示 Set foo = Nothing End Subここで補足。
Dim foo As Collection とした場合
Collectionオブジェクトを利用することができる変数の入れ物ができただけにすぎません。
Dim foo As New CollectionのようにNewを使うことで初めてCountが使えるようになります。
Dim foo As New Collectionと一行で表現しても
Dim foo As Collection 'この時点ではNothingの状態。
Set foo = New Collectionとニ行で表現しても一緒です。
■要素を追加する<.Add>
Option Explicit Sub SampleCode() Dim foo As New Collection foo.Add "a" foo.Add "b" foo.Add "c" foo.Add "d" foo.Add "e" Set foo = Nothing End Sub
■要素を表示する<.Item([番号])> ※番号は、1以上
Option Explicit Sub SampleCode() Dim foo As New Collection foo.Add "a" foo.Add "b" foo.Add "c" foo.Add "d" foo.Add "e" 'Foo文で表示 Dim i As Integer For i = 1 To foo.Count Debug.Print foo.Item(i) Next 'For Each文で表示 Dim v As Variant For Each v In foo Debug.Print v Next Set foo = Nothing End Sub.Itemメソッドで要素の番号を指定する時は、
最初の要素が1になるので1以上の数値ということになります。
■要素の削除<.Remove([要素番号])>
Option Explicit Sub SampleCode() Dim foo As New Collection foo.Add "a" foo.Add "b" foo.Add "c" foo.Add "d" foo.Add "e" foo.Remove (3) Set foo = Nothing End SubRemoveすると削除されたインデックス番号のところにそれ以降の要素が前へ一つずつ詰まることになります。
dが4番⇒3番
eが5番⇒4番へかわっています。
初期化ではなく、取り除かれることに注意ですね。
うっかり偶数番目のデータだけ省いてしまおうと思ってこんなコードを書くとエラーになりますね
Option Explicit Sub SampleCode() Dim foo As New Collection Dim i As Integer For i = 1 To 10 foo.Add i Next For i = 1 To foo.Count If i / 2 = Int(i / 2) Then '偶数番目の値は削除する foo.Remove (i) End If Next Set foo = Nothing End Sub
For文は、iが1から10になっら終了します。
i=2 i=4 i=6
================================
Item1:1 Item1:1 Item1:1
Item2:3 Item2:3 Item2:3
Item3:4 Item3:4 Item3:4
Item4:5 Item4:6 Item4:6
Item5:6 Item5:7 Item5:7
Item6:7 Item6:8 Item6:9
Item7:8 Item7:9 Item7:10
Item8:9 Item8:10
Item9:10
i=8
Item8がないのでエラーとなる。
どうせやるなら、小さい番号から処理をするのでなく、大きい番号から処理すべきですね。
Option Explicit Sub SampleCode() Dim foo As New Collection Dim i As Integer For i = 1 To 10 foo.Add i Next For i = foo.Count To 1 Step -1 If i / 2 = Int(i / 2) Then foo.Remove (i) End If Next End Sub
i=10 i=8 i=6 i=4 i=2
========================================================
Item1:1 Item1:1 Item1:1 Item1:1 Item1:1
Item2:2 Item2:2 Item2:2 Item2:2 Item2:3
Item3:3 Item3:3 Item3:3 Item3:3 Item3:5
Item4:4 Item4:4 Item4:4 Item4:5 Item4:7
Item5:5 Item5:5 Item5:5 Item5:7 Item5:9
Item6:6 Item6:6 Item6:7 Item6:9
Item7:7 Item7:7 Item7:9
Item8:8 Item8:9
Item9:9
0 件のコメント:
コメントを投稿