🦝

VBAのコレクションについて

2022/12/11に公開

この記事ではVBAのコレクションについてまとめます。シートやブックを操作するにはコレクションの概念を正しく理解する必要があります。オブジェクトとは何か?から復習して

オブジェクトについて

オブジェクトとは何か?

VBAにおける操作対象をオブジェクトと呼びます。 具体的にはセル、行、列、シート、ブックなどの総称を指します。これらオブジェクトの操作をプログラムによって自動化することがVBAによるプログラミングの1番の目的でした。

オブジェクトへの操作

オブジェクトへの操作は下記2種類の構文があります。 値を設定するか?処理を行うか?という違いです。これら2つの構文を使えばExcelの機能のほとんどをVBAで実行できます。

オブジェクト.プロパティ = 値
オブジェクト.メソッド = 引数

しかしこれらを並べるだけでは、コードを上から順番に1行ずつ実行するだけの単純な処理しかできません。そこで実行を制御するために条件分岐や繰り返し処理などの仕組みが必要とされました(それにはまた変数や関数などの仕組みも含まれます。)

オブジェクトの種類

主なオブジェクトには下記の種類があります(公式リファレンスからも確認できます)。

オブジェクト 名前
Excel Applicationオブジェクト
ブック Workbookオブジェクト
ワークシート Worksheetオブジェクト
セル Rangeオブジェクト
グラフ ChartObjectオブジェクト
図形 Shapeオブジェクト

コレクションとは

コレクションとは何か?

同じ種類の複数のオブジェクトをまとめて扱うための仕組みです。 もしくは同じ種類のオブジェクトの集合をオブジェクトと呼びます。

コレクションはなぜ必要か?

私たちの日常業務において、オブジェクトは複数まとめて扱うことがほとんどだからです。 オブジェクトはそれ1つだけで扱うことは滅多にありません。複数のオブジェクトが同時に存在することがほとんどですし、私たちの日常業務でも複数のオブジェクトを同時に扱う場面が多くあります。

  • ブック内のすべてのシートから転記したい
  • 開いている全てのブックからデータを抽出したい
  • 図形(グラフ)を一括でサイズ変更したい

このような「複数のオブジェクトを同時に扱いたい」という場面においてコレクションは使われます。

主なコレクション

主なコレクションはこちらです。特にブックを操作するWorkbooksコレクションとシートを操作するWorksheetsコレクションの2つがよく使われます。

オブジェクト コレクション 内容
Worksheet Worksheets ブック内の全てのワークシート
Workbook Workbooks 開いている全てのブック
ChartObject ChartObjects ワークシート上の全てのグラフ
Shape Shapes ワークシート上の全ての図形

例外:Rangeオブジェクト

オブジェクトは単一の操作対象を意味しており、オブジェクトの集合をコレクションと呼びました。その中でRnageオブジェクトは例外的なオブジェクトとなっています。Rangeオブジェクト1つで単一のセルも複数のセルも表すことができます。

単一のセル
Range("A1")
複数のセル
Range("A1:C4")

Rangeオブジェクトはそれ自体がコレクションの役割も担っている特殊なオブジェクトとなっています。

コレクションもオブジェクトの一種

コレクションとは同じ種類のオブジェクトをまとめたモノ..と説明してきましたが、コレクション自体も実はオブジェクトです。「ブック内の全ワークシートを印刷する」、「開いている全てのブックを閉じる」というように、コレクション自体も操作対象になります。VBAにおける操作対象は結局のところ全てオブジェクトです。WorksheetsコレクションはWorksheetsコレクションとも呼べますし、WorkbooksコレクションはWorkbooksオブジェクトといえます。

コレクションの操作

コレクションの操作には下記2つのパターンがあります。

1、コレクションとしてオブジェクトをまとめて扱う
2、コレクション内のオブジェクトを個別で扱う

1、コレクションとしてオブジェクトをまとめて扱う

コレクション内のオブジェクトをまとめて扱う構文はこちらです。

コレクション名.プロパティ
コレクション名.メソッド

具体例としてPrintOutメソッドを使うことによって、ブック内の全てのワークシートが印刷されるようになります。

Worksheets.PrintOut

2、コレクション内のオブジェクトを個別で扱う

コレクション内のオブジェクトを個別で指定するには2つの記述方法があります。1つが名前で指定する方法、もう1つが番号で指定する方法です。

名前で指定する方法
コレクション名("名前").プロパティ
コレクション名("名前").メソッド
名前で指定する方法
コレクション名(番号).プロパティ
コレクション名(番号).メソッド

具体例としてシートの1番目を印刷するマクロを、2パターンの方法で記述してみます。

Worksheets("sheet1").PrintOut
Worksheets(1).PrintOut

Worksheetsと複数形になっている点に注意をして下さい。

Discussion