Script事業案内エクセル以外ホームマクロVBAマクロVBA入門コレクションとは(Collection)最終更新日:2019-09-22第58回.コレクションとは(Collection)同種のオブジェクトを複数まとめたものを「コレクション」と呼びます、コレクションもオブジェクトの一種です。Workbookオブジェクトが複数まとまったものは「Workbooksコレクション」Worksheetオブジェクトが複数まとまったものは「Worksheetsコレクション」オブジェクト名が単数形であるのに対し、コレクション名が複数形であることがポイントです。多くの場合、○○○オブジェクトに対応する、○○○sコレクションがあります。(全てのオブジェクトにコレクションがあるわけではありません)従って、Excelには、多くのコレクションがあります。普通は、.Itemを省略して、コレクション(インデックス)または、コレクション("オブジェクト名")このように書くことが多いです。具体的には、Workbooks("Book1.xls")Worksheets("Sheet1")Worksheets(1)等々になります。この使い方は、既に何度も出てきたものですので、記述に違和感はないでしょう。セルであるRangeオブジェクトのコレクションは?セルであるRangeオブジェクトのコレクションは、どうなっているのでしょうか。少なくとも、Rangesコレクションというものはありません。Rangeコレクションという言い方も、普通はしません。そもそも、セル(単一セル)のコレクションが、Rangeオブジェクトなのです。単一セルを表すオブジェクトが存在していないのです。Cellsが複数形で、Cellオブジェクトのコレクションのような感じを受けるにもかかわらず、Cellオブジェクトなんて存在していない事が、余計に混乱を招いているのかもしれません。Rangeオブジェクトだけが特別なのです。Rangeは、オブジェクトでもあり、コレクションでもあります。コレクションの要素数コレクションの要素数、つまりコレクションに入っているオブジェクトの数を取得するには、コレクション.Countこれで、コレクション内のオブジェクト数を取得できます。コレクション(1)コレクション(2)・・・コレクション(コレクション.Count)これらは単一のオブジェクトであり、その集合がコレクションとなっています。コレクションは、コレクション.Count個のオブジェクトの集まりだという事です。Sheet3と言う事になります。Collectionオブジェクト上記までのコレクションの説明は、VBAとしてのコレクションと言う用語の説明です。VBAには、独自のコレクションを作成するためのオブジェクトが用意されています。それがCollectionオブジェクトになります。Collectionオブジェクトは、1つのオブジェクトとして参照できる複数の要素の集合です。つのオブジェクトとして参照できます。文字列、数値、オブジェクトを要素とした独自のコレクション(オブジェクト)を作成できるという事です。コレクションのメンバーは、同じデータ型を共有する必要はありません。データ型の違うデータを1つのコレクションに入れられるという事になります。いえ実務において、関連性のないオブジェクトを1つのコレクションに入れるというのは少し無理がありますが。値の取得のみ可能です。前述のコレクションの説明のとおりです。オブジェクトにメンバを追加します。オブジェクトのメンバを返します。オブジェクトからメンバを削除します。メソッドの構文は、次の対象となるオブジェクトと名前付き引数から構成されます。Collectionオブジェクトを指定します。追加するメンバを表す式を指定します。各メンバの位置を表す数値の代わりに使用できる重複しない文字列を指定します。コレクションの中の相対的な位置を表す式を指定します。追加対象のメンバは、このbeforeで指定したメンバの前に追加されます。数式を使って指定する場合、1~Countプロパティの値までの範囲の整数を指定します。文字列式を使って指定する場合、メンバをコレクションに追加したときに指定したkeyと一致する文字列を指定します。beforeとafterを同時に指定することはできません。コレクションの中の相対的な位置を表す式を指定します。コレクション内のafterで指定したメンバの後ろに追加されます。数式を使って指定する場合、1~Countプロパティの値までの範囲の整数を指定します。文字列式を使って指定する場合、メンバをコレクションに追加したときに指定したkeyと一致する文字列を指定します。beforeとafterを同時に指定することはできません。引数Keyには重複する値を指定できずエラーとなります。引数Keyは省略可能ですが、その場合は当然キーによる要素へのアクセスは出来なくなります。オブジェクトのメンバを返します。前述のコレクションの説明のとおりです。オブジェクトからメンバを削除します。Collectionオブジェクトを指定します。削除するメンバの位置を式で指定します。数式を使って指定する場合、1~Countプロパティの値までの範囲の整数を指定します。文字列式を使って指定する場合、メンバをコレクションに追加したときに指定したkeyと一致する文字列を指定します。作成したCollectionオブジェクトの使い方は、前述のコレクションと同様になります。後ろの要素に行くにしたがってより処理時間がかかってしまうようになります。colls(1)Nextコレクションに対して、インデックス指定してアクセスすると、後ろの要素に行くにしたがってとても遅くなります。これは、コレクションのメモリ構造がチェーンのように次々につながっている事に起因します。Eachを使って以下のように処理してください。Next)|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技ホームマクロVBAマクロVBA入門コレクションとは(Collection)このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用ホームマクロVBAマクロVBA入門コレクションとはこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。