Excelデータを扱う コレクションラッパークラス⑤ 検証中
chemiphys.hateblo.jp
利用は自己責任で,と謳ってはいても,できうる限り確認はしなきゃいと,確認してみています。
自分も,実際使う気満々なので,そのためにも検証したかった。
たった5行程度のデータで作ってましたからね,大量のデータを使ってみないと。
thomさんのブログで紹介されている,なんちゃって個人情報を使ってみました。200件のデータを準備
自動生成されたものとはいえ,確かに実名と重なる可能性があるので,ちっちゃいです。
前のコードの DataCollection.cls に Countプロパティ を追加しました。そっちのほうが使い勝手が良かった。
Property Get Count() As Long Count = Col.Count End Property
そして,標準モジュールでいろいろ試してみた。
Option Explicit Sub test() Dim Data As DataCollection: Set Data = New DataCollection Dim TargetSheet As Worksheet: Set TargetSheet = ThisWorkbook.Worksheets(1) '元データを設定 Data.GetData TargetSheet.Range("a1"), True Dim ret As Variant Data.Extract(3, "=", "男").Reduce("1 2 3 7 6 4").Output Worksheets(2).Cells(1), True '重複無しリストをvariantで返す。添え字は1からにしています。第3引数を付けると,ワークシートに出力 ret = Data.UniqueList(7, False, TargetSheet.Cells(1, 10)) Dim i For i = 1 To UBound(ret) TargetSheet.Cells(i, 11) = Data.Extract(7, "=", ret(i)).Count Worksheets.Add after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) Data.Extract(7, "=", ret(i)).Output ActiveSheet.Cells(1, 1), True ActiveSheet.Name = ret(i) Next ret = Data.UniqueList(4, True, TargetSheet.Cells(1, 12)) For i = 1 To UBound(ret) TargetSheet.Cells(i, 13) = Data.Extract(4, "=", ret(i)).Count Next ret = Data.UniqueList(6, True, TargetSheet.Cells(1, 14)) For i = 1 To UBound(ret) TargetSheet.Cells(i, 15) = Data.Extract(6, "=", ret(i)).Count Next End Sub
単独でそれぞれ使うのは前回やってみていましたが,作り的に,組み合わせて使えるように作れているようでした。自覚無し。
Data.Extract(3, "=", "男").Reduce("1 2 3 7 6 4").Output Worksheets(2).Cells(1), True
性別が男のデータを抽出して,列を1,2,3,7,6,4の順に並び替えて 2番目のシートに出力する。 3つのメソッドを組み合わせて使えました。
さすがFunction
ret = Data.UniqueList(7, False, TargetSheet.Cells(1, 10))
Dim i
For i = 1 To UBound(ret)
TargetSheet.Cells(i, 11) = Data.Extract(7, "=", ret(i)).Count
Worksheets.Add after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Data.Extract(7, "=", ret(i)).Output ActiveSheet.Cells(1, 1), True
ActiveSheet.Name = ret(i)
Next
前回ミスってたUniqueListで 重複無しリストを出力して,そのそれぞれについて,抽出したデータのカウントを取ったり,
ワークシートを追加して,Extractで抽出したデータをOutputで次々に出力していく。これもできました。
非常に多くのシートができるので,スクリーンショットは載せませんが,やっていることに対して, 標準コードの量はかなり少ない。
テストの検証はずさんではありますので,まだ使い込んでみないとわからないことも多々ですが,なかなかうまく動いている気はする。
かなり複雑化しましたので,もはやラッパークラスという表現はおかしいのかもしれませんが,
Collectionは便利でとてもいいものだと思いつつ,使いづらいなと思った点をクラスモジュールで自分が使いやすいように変えていけるという実感は今回持てました。
経験を積めば,もっときちんと組めるようになるかな~。