クラスモジュールでコレクションを使う方法

マクロ講座 動画編 111回
マクロ講座

クラスでコレクションを使えるか

クラスモジュールで作成したオブジェクトをコレクションにする

ここではクラスモジュールの具体的な使い方をご紹介しています。
1行ごとに DVD 情報を記入したシートがあります。
なぜここでは DVD のデータをオブジェクトとして取り上げたかと言うと、実際私はたくさんのブルーレイ DVD を所有していて、それらの管理にとても苦労した記憶があります。 1行が一つの映画に関する DVD 情報となっています。
つまり1行がひとつのオブジェクトということです。
しかしオブジェクトが複数あります。
基本的な部分は共通で、所々違うという複数のオブジェクトがあり、しかも100も200もあるのです。
どうやって区別したらいいのでしょうか?その方
法としてクラスモジュールの中でコレクションを使うという方法があります。今回はそれについて解説します。
【コンテンツ】
1.前回のおさらい
2.コレクションについて
3.クラスモジュールでコレクションを使う
4.実例 コードの書き方

マクロ動画 クラスモジュールでコレクションを使う方法

https://youtu.be/4fhky39sCl8

複数のデータをクラスでどのように扱うか

  1. 前回、クラスモジュールに書いたコードを見てみましょう。クラスの宣言セクションに変数を追加すると、そのクラスのプロパティとなります。
    追加されたプロパティはメンバーともいいます。

    NAMAE1
  2. また記述したプロシージャはメソッドとなります。このメソッドはプロパティにセルの値を代入しているコードです。

    NAMAE2
  3. クラスモジュールに書いたメソッドとプロパティを使うためには、標準モジュールのコード画面にて、インスタンス化というのを行います。
    これは変数を宣言して、タイプにクラスを指定することで、実体を与えます。

    NAMAE3
  4. Mymovieというプロシージャを実行すると、イミディエイトウィンドウに映画のクラスモジュールでコレクションを使う方法と公開年と制作国が書き出されます。
    この場合書き出されるのは、1行のデータのまとまりとなります。

    NAMAE4
  5. しかしシートにあるDVDのデータは複数あります。これをExcelVBAのコレクションとして、クラスで扱えたらべんりです。 すると、dvdという変数をdvd(1),dvd(2),dvd(3),のようなコレクションとして利用できます。

    NAMAE5

コレクションの宣言と指定方法

  1. コレクションの中で1つのものを指定するときは、ワークシートやブックを指定するときと同じように指定することができます。

    NAMAE6
  2. コレクションはItemとKeyをセットで格納します。
    宣言の仕方は、以下のようにします。

    NAMAE7
  3. 今回のサンプルは下記の表です。

    NAMAE8
  4. 標準モジュールにてコレクションを宣言します。

    NAMAE9
  5. Setステートメントでコレクションのデータを取り込む範囲を指定します。

    NAMAE10
        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
     

クラスを宣言しインスタンス化する

  1. このコードでは、コレクションとしてムービーのクラスモジュールでコレクションを使う方法を取り込んでいます。

    NAMAE11
  2. イミディエイトウィンドーを見てみましょう。

    NAMAE12
  3. まだクラスを宣言していませんでした。コレクションが先だったのです。クラスはFor文の前で宣言して、セットするのは、For文の中です。

    NAMAE13
  4. 1行のデータをセルごとにまず、クラスの値に代入します。
    3つのプロパティに代入したら、そのMovieという変数をコレクションに追加します。 前に書いていた m coll.Add rg.Cells(i, 1).Value というコードは、 mcoll.Add Movie に書き換えます。

    NAMAE14
  5. プロシージャをステップ実行して、ウォッチ式で見てみましょう。 初めに1行目がMovieというクラスに代入されます。

    NAMAE15
  6. それが、コレクションに追加されていく様子を確認することができます。

    NAMAE16
    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
  7. これが Collection とクラスモジュールをうまく組み合わせて使う方法です。この方法をマスターすることで、クラスをより一層便利なものにすることができます。

    NAMAE17