「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Excel VBAをはじめから(その09/X)

 仕事で未だに使うことのある\mathrm{Excel\ VBA}を改めて体系的に学びたく

を読んでいく。


power-of-awareness.com

5. 配列・コレクションの扱い方

5.5 コレクションを配列代わりに利用する

 要素を増減させながらリストを管理するには、\mathrm{Collection}オブジェクトの利用を検討する。

5.5.1 特定の要素をまとめて管理する

 \mathrm{Collection}オブジェクトは、以下の3つのプロパティ/メソッドを持つ、同じ種類のメンバーを管理するためのオブジェクトである。

プロパティ/メソッド
用途
\mathrm{Count}プロパティ
素数を取得
\mathrm{Add}メソッド
要素を追加
\mathrm{Remove}メソッド
要素を削除

 \mathrm{Collection}オブジェクトを利用するには、\mathrm{Collection}オブジェクト型で変数を宣言し、\mathrm{New}演算子で初期化する。値を追加するには、\mathrm{Add}メソッドを利用する。

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)

特定の要素を除外するには、\mathrm{Remove}メソッドの引数にインデックス番号を指定する。

' 変数名.Remove インデックス番号

 キュー行列*1のように、「先入先出」ルールでリストを扱うには、\mathrm{Collection}の要素数が「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:入ってきたデータを順番に格納し先に格納したデータから順に取り出す方式のデータ構造。

プライバシーポリシー お問い合わせ