クラスモジュール3、クラスにプロパティを追加する、Excel塾のVBAマクロ講座中級編110回

クラスモジュール3、クラスにプロパティを追加する

クラスモジュール3、クラスにプロパティを追加する、Excel塾のVBAマクロ講座中級編110回
マクロ講座

動画でExcel クラスモジュール3、クラスにプロパティを追加する

クラスモジュール3、クラスにプロパティを追加する

前回はクラスにメソッドを追加しました。3回ではクラスにプロパティを追加する方法を説明します。

作成したクラスにPropertyというメンバーを加えます。
方法は、クラスモジュールの宣言セクションで宣言すると、そのクラスのプロパティになります。クラスのメンバーとも言います。
(サンプルファイルは、こちらです。 クラスモジュール3、クラスにプロパティを追加する、サンプルrn回

マクロ動画 クラスモジュール3、クラスにプロパティを追加する

https://youtu.be/_mbkz4hz8kk

クラスのメソッドとプロパティ

  1. オブジェクトは、何かをするというメソッドと、それからオブジェクトが持っている性質属性を表すものとしてのプロパティ二つを備えて持っています。

    NAMAE1
  2. プロパティは、オブジェクトの特徴として性質や属性を表すために使います。
    これはクラスモジュールの宣言セクションで宣言すると、そのクラスのプロパティになります。

    NAMAE2
  3. たとえば猫というオブジェクトを作る場合、猫には猫のメソッドを与えてやる必要があります。
    またその特徴をつけるためにプロパティも必要です。

    NAMAE3
  4. 今回動画のサンプルとして、DVD のコレクションのデータを表にしました。 その表に必要なオブジェクトやプロパティを作っていきましょう。

    NAMAE4
  5. VBEを開いて、クラスモジュールを挿入します。
    そしてコードを分かりやすくするために、クラスモジュールのオブジェクト名を MYDVD と変更しておきます。

    NAMAE5

クラスモジュールの宣言セクションにプロパティを書く

  1. クラスモジュールの宣言セクションにMovieTitleとYearとCountryという三つの変数を(プロパティ)を宣言しました。

    NAMAE6
    Public MovieTitle As String
    Public Year As Long
    Public Country As Strin
  2. 本当にプロパティとして追加されたかどうか確認してみましょう。
    F 2キーを押すとオブジェクトブラウザが表示されますので、 選択のプルダウンから VBA プロジェクトを選択してもらうと、 MYDVD というクラスがあります。 プライベートクラスとなってますね確かにクラスです。

    NAMAE7
  3. そしてMYDVD のメンバーとしてMovieTitleとYearとCountryとこの三つが表示されています。 このアイコンを見てもらうと、シートのようなある特定の場所を指さして中身ですよ、みたいな意味にとれます。
    これがプロパティのアイコンです。

    NAMAE8
  4. さてまだ実体となるオブジェクトがないので何もできません。まずはモジュールの名前を使いやすいように変更しましょう。

    NAMAE9
  5. なぜモジュールの名称を変更したのかと言うと、クラスモジュールの名称と対応しているので、自分にとってわかりやすいということからです。

    NAMAE10

インスタンス化して実体を与える

  1. では今作成したプロパティを使ってコードを書いてみましょう。

    NAMAE11
        Dim dvd As MyDvd
        Set dvd = New MyDvd

    上記2行でdvdという変数をMydvdというクラスで宣言し、新しいMydvdオブジェクトにセットしています。これがインスタンス化です。

  2. F8キーを押して1行ずつ実行するとローカルウィンドウに、プロパティに値が代入されていくのを確認することができます。

    NAMAE12
  3. 次にイミディエイトウィンドウに書き出す場合のコードは次のようになります。

    NAMAE13
    Sub Mymovie()
        Dim dvd As MyDvd
        Set dvd = New MyDvd
        With Sheet1
            dvd.MovieTitile = .Cells(1, 1).Value
            dvd.Year = .Cells(1, 2).Value
            dvd.Country = .Cells(1, 3).Value
        End With
        Debug.Print dvd.MovieTitile & "," & dvd.Year & " ," & dvd.Country
    End Sub
  4. 単純なコードですが、何の為にわざわざ書いたのかというと、青く反転させた部分をメソッド化してしまえば、モジュールに書くコードが簡略化できるということを紹介するためです。

    NAMAE14
  5. クラスモジュールに次のメソッドを書きます。

    NAMAE15
  6. そして、標準モジュールDvdColectの方のコードには、メソッドを記述してやります。

    NAMAE16
  7. ここまできたら、次は、FOR文を使ってデータの行数分同じ操作をすれば、全部取得して書き出せると想像できるかと思います。
    次回は、このつづきのコードを書いていきましょう。

    NAMAE17