仕事で未だに使うことのあるを改めて体系的に学びたく
を読んでいく。
5. 配列・コレクションの扱い方
5.5 コレクションを配列代わりに利用する
要素を増減させながらリストを管理するには、オブジェクトの利用を検討する。
5.5.1 特定の要素をまとめて管理する
オブジェクトは、以下の3つのプロパティ/メソッドを持つ、同じ種類のメンバーを管理するためのオブジェクトである。
プロパティ/メソッド |
用途 |
---|---|
プロパティ |
要素数を取得 |
メソッド |
要素を追加 |
メソッド |
要素を削除 |
オブジェクトを利用するには、オブジェクト型で変数を宣言し、演算子で初期化する。値を追加するには、メソッドを利用する。
Dim userNames As Collection ' Collectionを初期化 Set userNames = New Collection ' userNames.Add 追加する値[,キー値][,Before][,After] '値を追加する:BeforeまたはAfterで指定したインデックス番号の前(あるいは後)に追加
特定の要素にアクセスするには、「1」から始まるインデックス番号を利用してアクセスする。
Dim userNames As Collection 'Collectionを初期化 Set userNames = New Collection '値を追加 userNames.Add "増田" userNames.Add "星野" userNames.Add "宮崎" '要素数や値を取り出す Debug.Print "要素数:", userNames.Count Debug.Print "先頭の値:",userNames(1)
特定の要素を除外するには、メソッドの引数にインデックス番号を指定する。
' 変数名.Remove インデックス番号
キュー行列*1のように、「先入先出」ルールでリストを扱うには、の要素数が「0」になるまでインデックス番号「1」の値を利用し削除する。
''' 先入先出 Dim fruitsQueue As Collection Set fruitsQueue = New Collection ' 値を追加 fruitsQueue.Add "りんご" fruitsQueue.Add "みかん" fruitsQueue.Add "ぶどう" ' 先入先出でループ処理 Do while (fruitsQueue.Count > 0) Debug.Print fruitsQueue(1) fruitsQueue.Remove 1 Loop Debug.Print "--- 処理終了 ---" ''' 先入後出 Dim fruitsStack As Collection, lastIndex As Long Set fruitsStack = New Collection ' 値を追加 fruitsStack.Add "りんご" fruitsStack.Add "みかん" fruitsStack.Add "ぶどう" ' 先入後出でループ処理 lastIndex =fruitsStack.Count Do while (lastIndex > 0) Debug.Print fruitsStack(lastIndex) fruitsStack.Remove lastIndex lastIndex = fruitsStack.Count Loop Debug.Print "--- 処理終了 ---"
*1:入ってきたデータを順番に格納し先に格納したデータから順に取り出す方式のデータ構造。