今回はベテランVBA使いの方にもあまり活用されていないと思われるClassモジュールの活用について。
現在発売されている書籍でもClassモジュールについての説明がほとんど無く、パーフェクト○○とか、完全○○とか書かれた網羅系の書籍をあたると一番最後の方に申し訳程度に掲載されているくらいだ。
またその説明も、「使い方」に終始しており「使いどころ」については触れられていない。
そこで今回は、Classモジュールの何が便利なのか、例を挙げて紹介する。
※使い方については他のWebサイトなどでも検索できるのでそちらを当たってください。
※2016年末に重い腰を上げてようやく「使い方」に関する入門を書きましたのでご参照ください。
thom.hateblo.jp
私の記事ではないけど、こちらもおススメ!
ateitexe.com
実は先日、このような動画を作った。
このマクロの中で、Classモジュールを活用している。
このマクロの動作を大ざっぱに説明すると、VBAからIEを操作して各カテゴリページを開き、各商品の情報を商品コレクションに格納する。
それから商品コレクションをFor Eachで回しながらセルに転記している。
Webから取得したばかりの商品情報は、次のように余計なテキストがくっついている。
表示名 = "【大阪クンテープ道頓堀本店】大人気!タイ料理5点セット【送料無料】 【冷凍】" 価格表記 = "3,402円(税抜 3,150円、税 252円)"
これを、こうしたい。
商品名 = "大人気!タイ料理5点セット" 価格 = "¥3,402"
そこで作ったのがこちらの「商品」クラス
Public 表示名 As String Public 価格表記 As String Public カテゴリー As String Public Property Get 価格() As String 価格 = Replace(価格表記, ",", "") 価格 = Val(価格) End Property Public Property Get 税別価格() As Long 税別価格 = Int(CCur(価格) / 1.08) End Property Public Property Get 名称() As String 名称 = Replace(表示名, vbNewLine, "") Dim re As New RegExp re.Pattern = "【[^【]*】" re.Global = True 名称 = re.Replace(名称, "") 名称 = Trim(名称) Set re = Nothing End Property
中身は気にしなくて良い。ポイントは、Propertyが3つともGet(取得専用)であるということ。
※ホントは価格表記や表示などは書込み専用にするのが望ましいが、そのへんは省略した。
こうすると何が良いかというと、メインのマクロを、以下のように超シンプルに書けるようになる。
'商品の作成 Dim x As 商品 Set x = New 商品 '商品の設定 x.表示名 = "【大阪クンテープ道頓堀本店】大人気!タイ料理5点セット【送料無料】 【冷凍】" x.価格表記 = "3,402円(税抜 3,150円、税 252円)" '商品の読み取り Debug.Print x.名称 Debug.Print x.価格
ただ表示名と価格表記をセットして、代わりに名称と価格を読み取っただけであるが結果は見事に整形されて次のようになる。
大人気!タイ料理5点セット
3402
あとは金額をセル側の書式でいじれば完成。
今回の説明では使わなかったが、税別価格もプロパティとして用意してあるので応用が利く。
他の例を挙げると、顧客クラスを作って生年月日を格納すると年齢プロパティで情報を取得できるし、未成年かどうかというプロパティを作ることもできる。
オブジェクトのことはオブジェクトにやらせる。そうすればメインコードはよりスッキリして処理の流れを追いやすくなる。
クラスモジュールを扱っているVBA本
残念ながら日本の書籍ではまともにクラスモジュールを扱っているものは殆ど無い。
洋書なら以下の本が詳しいのでおススメである。
- 作者: Ken Getz,Mike Gilbert
- 出版社/メーカー: Sybex
- 発売日: 2001/04/25
- メディア: ペーパーバック
- クリック: 18回
- この商品を含むブログ (1件) を見る
日本語の書籍では、以下の本がクラスモジュールに少しページを割いている。
そこが知りたい!Excel VBAプロの技 Excel97/2000/2002/2003対応!
- 作者: 井川はるき
- 出版社/メーカー: ナツメ社
- 発売日: 2003/11
- メディア: 単行本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (4件) を見る