クラスモジュールでコレクションを使う方法
クラスでコレクションを使えるか
クラスモジュールで作成したオブジェクトをコレクションにする
ここではクラスモジュールの具体的な使い方をご紹介しています。
1行ごとに DVD 情報を記入したシートがあります。
なぜここでは DVD のデータをオブジェクトとして取り上げたかと言うと、実際私はたくさんのブルーレイ DVD を所有していて、それらの管理にとても苦労した記憶があります。
1行が一つの映画に関する DVD 情報となっています。
つまり1行がひとつのオブジェクトということです。
しかしオブジェクトが複数あります。
基本的な部分は共通で、所々違うという複数のオブジェクトがあり、しかも100も200もあるのです。
どうやって区別したらいいのでしょうか?その方
法としてクラスモジュールの中でコレクションを使うという方法があります。今回はそれについて解説します。
【コンテンツ】
1.前回のおさらい
2.コレクションについて
3.クラスモジュールでコレクションを使う
4.実例 コードの書き方
マクロ動画 クラスモジュールでコレクションを使う方法
https://youtu.be/4fhky39sCl8複数のデータをクラスでどのように扱うか
-
前回、クラスモジュールに書いたコードを見てみましょう。クラスの宣言セクションに変数を追加すると、そのクラスのプロパティとなります。
追加されたプロパティはメンバーともいいます。 -
また記述したプロシージャはメソッドとなります。このメソッドはプロパティにセルの値を代入しているコードです。
-
クラスモジュールに書いたメソッドとプロパティを使うためには、標準モジュールのコード画面にて、インスタンス化というのを行います。
これは変数を宣言して、タイプにクラスを指定することで、実体を与えます。 -
Mymovieというプロシージャを実行すると、イミディエイトウィンドウに映画のクラスモジュールでコレクションを使う方法と公開年と制作国が書き出されます。
この場合書き出されるのは、1行のデータのまとまりとなります。 -
しかしシートにあるDVDのデータは複数あります。これをExcelVBAのコレクションとして、クラスで扱えたらべんりです。 すると、dvdという変数をdvd(1),dvd(2),dvd(3),のようなコレクションとして利用できます。
コレクションの宣言と指定方法
-
コレクションの中で1つのものを指定するときは、ワークシートやブックを指定するときと同じように指定することができます。
-
コレクションはItemとKeyをセットで格納します。
宣言の仕方は、以下のようにします。 -
今回のサンプルは下記の表です。
-
標準モジュールにてコレクションを宣言します。
-
Setステートメントでコレクションのデータを取り込む範囲を指定します。
Dim mcoll As New Collection Dim rg As Range Set rg = Sheet3.Range("A1").CurrentRegion Dim i As Long, Movie As clsDvd For i = 2 To rg.Rows.Count mcoll.Add rg.Cells(i, 1).Value Next i
クラスを宣言しインスタンス化する
-
このコードでは、コレクションとしてムービーのクラスモジュールでコレクションを使う方法を取り込んでいます。
-
イミディエイトウィンドーを見てみましょう。
-
まだクラスを宣言していませんでした。コレクションが先だったのです。クラスはFor文の前で宣言して、セットするのは、For文の中です。
-
1行のデータをセルごとにまず、クラスの値に代入します。
3つのプロパティに代入したら、そのMovieという変数をコレクションに追加します。 前に書いていた m coll.Add rg.Cells(i, 1).Value というコードは、 mcoll.Add Movie に書き換えます。 -
プロシージャをステップ実行して、ウォッチ式で見てみましょう。 初めに1行目がMovieというクラスに代入されます。
-
それが、コレクションに追加されていく様子を確認することができます。
Sub ReadData() Dim mcoll As New Collection Dim rg As Range Set rg = Sheet3.Range("A1").CurrentRegion Dim i As Long, Movie As clsDvd For i = 2 To rg.Rows.Count Set Movie = New clsDvd Movie.MTitle = rg.Cells(i, 1).Value Movie.PYear = rg.Cells(i, 2).Value Movie.PCountry = rg.Cells(i, 3).Value mcoll.Add Movie Next i End Sub
-
これが Collection とクラスモジュールをうまく組み合わせて使う方法です。この方法をマスターすることで、クラスをより一層便利なものにすることができます。