このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】コレクション(Collection)とは何かを解説

2023年12月13日

VBAでコレクションを使う方法

VBAを書いているとたまに次のようなコレクション(Collection)に出会います。

  • Worksheetsコレクション
  • Workbooksコレクション

Worksheets(“Sheet1")のような形で、なんとなく使っている方も多いのではないでしょうか。

この記事はなんとなく使っているけど、よく分からないなという人向けになっています。

一度分かってしまえば難しいものではないので、このタイミングで理解してみましょう。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

コレクション(Collection)とは何か

コレクションは配列と同じように、複数のデータをまとめたものです。

例えば、Workbooksコレクションは複数のWorkbookオブジェクトをまとめたものです。

配列でも似たようなことができるのですが、コレクションはデータの取り出し方に違いがあります。

Sub Sample1()
    
    'Sheetsコレクション
    Dim shts As Sheets
    Set shts = Sheets
    
    '①インデックスによる取り出し
    Debug.Print shts(1).Name
    
    '②名前(key)による取り出し
    Debug.Print shts("Sheet1").Name
End Sub

コレクションはサンプルコードように2つのデータの取り出し方があります。

配列は、①インデックスによる取り出しはできるのですが、②名前(key)による取り出しはできません。

コレクションはインデックスと名前の両方でデータを取り出すことができます。

コレクションは配列と似ていて、インデックスでも名前でもデータを取り出せる、と覚えてください。

余談

ちなみに、コレクションと似たものとして辞書型(Dictionary)もあります。

辞書型は配列と逆で、②名前(key)による取り出しはできるのですが、①インデックスによる取り出しはできまん。

コレクション(Collection)を作る方法

コレクションですが、実は配列と同じように自分で作ることもできます。

Sub Sample()
    '空のコレクションを作成
    Dim col As Collection
    Set col = New Collection
End Sub

VBAでコレクションを使うには、まず、Collectionクラスを使用してコレクションを作成する必要があります。

サンプルコードのようにして、空のコレクションを作成できます。

コレクションに要素を追加する

Sub SampleAdd()
    '空のコレクションを作成
    Dim col As Collection
    Set col = New Collection
    
    'コレクションに要素を追加
    col.Add "item", "key"
End Sub

コレクションに要素を追加するにはAddメソッドを使います。

itemはコレクションに追加する要素(中身)です。サンプルコードでは文字列を入れていますが、オブジェクトや配列なども入れることができます。

keyはオブジェクトを識別するための文字列です。keyを省略することもできます。

コレクションの要素数を調べる

Sub SampleCount()
    '空のコレクションを作成
    Dim col As Collection
    Set col = New Collection
    
    'コレクションに要素を追加
    col.Add "item", "key"
    
    'コレクションの要素数を調べる
    Debug.Print col.Count
End Sub

コレクションの要素数を確認するにはCountプロパティを使います。

コレクションから要素を取り出す

Sub SampleItem()
    '空のコレクションを作成
    Dim col As Collection
    Set col = New Collection
    
    'コレクションに要素を追加
    col.Add "Item", "Key"
    'コレクションの要素数を調べる
    Debug.Print col.Count
    
    'コレクションから要素を取り出す
    Debug.Print col.Item("key") 'keyで取り出す
    Debug.Print col.Item(1) 'インデックスで取り出す
End Sub

コレクションに要素を取り出すにはItemメソッドを使います。

取り出しは辞書型(Dictionary)のようにkeyで取り出すこともできますし、配列のようにインデックスで取り出すこともできます。

コレクションから要素を削除する

Sub SampleRemove()
    '空のコレクションを作成
    Dim col As Collection
    Set col = New Collection
    
    'コレクションに要素を追加
    col.Add "Item", "Key"
    
    'コレクションの要素数を調べる
    Debug.Print col.Count
    'コレクションから要素を取り出す
    Debug.Print col.Item("key") 'keyで取り出す
    Debug.Print col.Item(1) 'インデックスで取り出す
    
    'コレクションから要素を削除する
    col.Remove "key" 'keyで指定
'    col.Remove 1 'インデックスで指定
End Sub

コレクションから要素を削除するにはRemoveメソッドを使います。

削除も辞書型(Dictionary)のようにkeyで指定することもできますし、配列のようにインデックスで指定することもできます。(要素が1つだけのためサンプルコードではインデックス指定をコメントアウトしています)

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

VBA

Posted by やろまい