クラスモジュール5、クラスとコレクション活用法、クラスって何が便利なのと思う人へ 112回

クラスモジュール5、クラスとコレクション活用法、クラスって何が便利なのと思う人へ

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

動画でExcel タイトル

クラスモジュール5、クラスとコレクション活用法

前回ムービーオブジェクトというオブジェクトを作成しました。
このオブジェクトはタイトルとイヤーとカントリーという3つの属性を持っています。

(サンプルファイルは、こちらです。 タイトル、サンプル112回

クラスモジュールをどのように使うか

コレクションとクラスの併用でより便利に

そしてさらに、ムービーオブジェクトを管理するためにコレクションを作成しました。このコレクションを作成したことにより コレクションのアイテム1アイテム2アイテム3などとというような形で データを呼び出すことが可能になりました。

NAMAE1

ムービーというオブジェクトを作成して、その後オブジェクト,一個一個をコレクションという形でまとめた コードはこのような形です。

NAMAE2

mcoll という名前のコレクションを作成しますと、宣言しました。
次にDim rg As Range
A1のカレントリージョンをrg という範囲であると宣言し、設定しています。

NAMAE3

Movie As clsDvd ここでムービーというオブジェクトを作るといってるわけですね。次に、
For i = 2 To rg.Rows.Count
ここでFor文で回しています。
2行目から6行目まで カウントして、回せ、ということです。

NAMAE4
        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

Set Movie = New clsDvd
そしてその1回ごとに 新しいオブジェクトを追加しています。
そして3つの属性を持ったオブジェクトを
mcoll.Add Movieということで
mcoll コレクションに追加したわけです。

NAMAE5

シートにデータを 書き出す

続いて、シートにデータを 書き出すというコードをちょっと加えてみましょう。もう1回For文で回します。変数kをLong型で追加しました。

NAMAE6

k= 1 To mcoll.Count
コレクションを作っているのでコレクションの数を数えろと言っています。

そして、セルの8列目9列目7列目に、Movie.MTitle、Movie.PYear、Movie.PCountryを入れろという内容のコードです。

Cellsのkは、 最初は1ですから、Cells(k, 8)というのは 1行目の8列目、Cells(k, 9)は1行目の9列目と一行目の7列目というふうにですね、7、8、9と回さないで、8、9、7にしてるんですね。
というのも、属性で指定できるので、列番号とかをあまり気にしないで自由に配置が可能です。

ではこれを実行してみましょう。同じシートのG列から書き出されています。

NAMAE7

こちらは、上記の同一シートにクラスで作成したオブジェクトをコレクションにして書き出すというコードになります。

'***コレクションのデータを同一シートに書き出す***
Sub ReadData2()
    Dim mcoll As New Collection
    Dim rg As Range
    Set rg = Sheet3.Range("A1").CurrentRegion
    
    Dim i As Long, k 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
    For k = 1 To mcoll.Count
    Set Movie = mcoll(k)
        With Sheet3
            .Cells(k, 8).Value = Movie.MTitle
            .Cells(k, 9).Value = Movie.PYear
            .Cells(k, 7).Value = Movie.PCountry
        End With
    Next k
End Sub

別シートに書き出す例

別シートに書き出したい場合は、次のようにします。 こちらは、もう一つ別シートをシートの一番後ろ(右)に追加して、データを1行ごとに入れていこうというコードです。

NAMAE7

Sub ReadData3()
    Dim mcoll  As Collection
    Set mcoll = 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
    
    For i = 1 To mcoll.Count
    Dim sheet As Worksheet
    Set sheet = Sheets.Add(after:=Worksheets(Worksheets.Count))
        With ActiveSheet
            .Cells(1, 1) = "Title"
            .Cells(2, 1) = "Year"
            .Cells(3, 1) = "Country"
            .Cells(1, 2) = mcoll(i).MTitle
            .Cells(2, 2) = mcoll(i).PYear
            .Cells(3, 2) = mcoll(i).PCountry
            .Columns("B:B").EntireColumn.AutoFit
            .Range("A1:A3").Interior.Color = RGB(198, 224, 180)
        End With
    Next i
End Sub