ExcelVBAのコレクションという概念

基礎から始めるVBA VBA

シリーズ前回までの内容で、

オブジェクト.プロパティ(メソッド)

という基本の形と、オブジェクトを明確に指定する方法を学びました。

タナイ
タナイ

今回は同じ種類のオブジェクトをまとめる「コレクション」という概念について考えていきましょう。

前回記事はこちら

コレクション=同じ種類のオブジェクトの集合体

オブジェクトとはプログラムの命令対象のことでした。

ブック全体、シート全体といった同じ種類のオブジェクトの集合体は、「コレクション」という用語で呼ばれます。

コレクションの種類

コレクションにはそれぞれ名前があります。

  • Workbooksコレクション(開いているブック全体)
  • Sheetsコレクション(ブック内のシート全体)
  • Worksheetsコレクション(ブック内のワークシート全体)
  • Chartsコレクション(ブック内のグラフシート全体)
タナイ
タナイ

それぞれコレクションの英語名には、複数形のsが付いていることに注意してください。

ちなみに、Sheetsコレクションの中にはWorksheetsコレクションとChartsコレクションが含まれています。

構造としては、

Workbooksコレクション>Sheetsコレクション>WorksheetsコレクションとChartsコレクション

という形になっています。

タナイ
タナイ

ちなみに、セル全体を表すRangeはオブジェクト兼コレクションという特別な要素になります。複数形のsが付いておらず、扱いが他のコレクションと違うので、ここでは例外として言及しません。

コレクションから命令対象となる「メンバ」を指定する

コレクションは同じ種類のオブジェクト「全体」を表す概念です。

そしてコレクションに含まれているそれぞれのオブジェクトは「メンバ」と呼ばれます。

例えば、「取引先住所録」「従業員住所録」「私生活住所録」という名前の3つの住所録ワークシートがあるとします。3つのワークシート全体はWorksheetsコレクション、そしてこの中の「従業員住所録」はWorksheetsコレクションの「メンバ」の1つです。

コレクションの中から1つのメンバを選んで命令対象のオブジェクトに指定するときは、以下のいずれかで記述します。

コレクション名(”メンバの名前”)
コレクション名(インデックス番号)
タナイ
タナイ

コレクション全体をプログラミングのオブジェクトとして指定することもできます。例えば、Worksheets.CountはWorksheetsコレクション全体をオブジェクトとして扱い、ワークシートの枚数(Countプロパティ)を返すプログラムです。

実際にプログラムで「コレクション」を使ってみよう

では、実際にVBAでコレクションを使ってみましょう。

Book1.xlsmとBook2.xlsmという2つのエクセルブックが開かれています。

Book2のA1セルに「Book2です。」と入力するためのプログラムを書いてみましょう。

Sub EditCellInBook2()
    Workbooks("Book2.xlsm").Worksheets(1).Range("A1").Value = "Book2です。"
End Sub

Workbooks("Book2.xlsm")でWorkbooksコレクションの中の「Book2.xlsm」という名前のメンバを、Worksheets(1)でWorksheetsコレクションの中の「インデックス番号が1のシート(一番左のシート)」を表しています。

実行結果は以下のようになります。

ブック名「Book2.xlsm」のSheet1のA1セルに「Book2です。」と入力されました。

タナイ
タナイ

コレクションは、名称もしくはインデックス番号で指定できるということを覚えておきましょう。

また、本記事では解説していませんが、コレクションは自分で作成することも可能です。

コメント

タイトルとURLをコピーしました