
動画でExcel タイトル
前回ムービーオブジェクトというオブジェクトを作成しました。
このオブジェクトはタイトルとイヤーとカントリーという3つの属性を持っています。
(サンプルファイルは、こちらです。 タイトル、サンプル112回)
そしてさらに、ムービーオブジェクトを管理するためにコレクションを作成しました。このコレクションを作成したことにより コレクションのアイテム1アイテム2アイテム3などとというような形で データを呼び出すことが可能になりました。

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

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

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

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 コレクションに追加したわけです。

続いて、シートにデータを 書き出すというコードをちょっと加えてみましょう。もう1回For文で回します。変数kをLong型で追加しました。
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列から書き出されています。

こちらは、上記の同一シートにクラスで作成したオブジェクトをコレクションにして書き出すというコードになります。
'***コレクションのデータを同一シートに書き出す***
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行ごとに入れていこうというコードです。

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