- ベストアンサー
標準モジュールとクラスモジュールの違い
- 標準モジュールとクラスモジュールの違いをまとめます。
- 標準モジュールはどこからでも使えるプロシージャを定義するのに対し、クラスモジュールは特定のオブジェクトに関連するプロシージャを定義します。
- 標準モジュールは値を保持しないが、クラスモジュールはインスタンス化されるオブジェクトが値を保持できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Public Function getSum( i1 as integer, i2 as interger ) getSum = i1 + i2 End Function のような関数なら、標準モジュールに書いた方がいい(使い勝手がいい)です。 クラスモジュールに書くと、 Set c1 = New ClassName1 c1.getSum(1, 2) のように、オブジェクト ( c1 ) を作ってからメソッド ( getSum() ) を呼び出さなければなりません。 クラス/オブジェクトを使用すると、今までの中央集権的なプログラムが独立分散型のプログラムになります。要は、細かいことはなるべくおのおののオブジェクトにさせるということです。 簡単なクラス/オブジェクトの例ですが、 '----------------------------------- 'CRectangle.cls 'Class:CRectangle ( 長方形 ) '----------------------------------- Public Width As Integer Public Height As Integer Public Function GetArea() As Long GetArea = CLng(Width) * CLng(Height) End Function '----------------------------------- '----------------------------------- 'フォームなど、どこか適当なところ '----------------------------------- Private Sub コマンド1_Click() Dim c1 As CRectangle Dim c2 As CRectangle Set c1 = New CRectangle c1.Height = 100 c1.Width = 200 Set c2 = New CRectangle c2.Height = 150 c2.Width = 250 '面積の計算は各オブジェクトがやってくれる。 Debug.Print c1.GetArea Debug.Print c2.GetArea End Sub ↑これだけでは、あまりクラス/オブジェクトの恩恵が得られていませんが、とりあえず、こんな感じです。 クラスについて、ここで全てを語ることはできませんので、詳しいことは書籍などを参考にされた方がいいと思います。クラス/オブジェクトの根本的なことについては、Visual Basic でも Excel VBA でも Access VBA でも同じだと思いますので、クラスについて取り扱っているなら、Excel VBA の書籍でも構わないと思います。 ただ、VB/VBA のクラスは、C++ や Java のクラスとは全然違うというか、かなりチャチなので、C++ や Java の書籍は、「 VB/VBA のクラスがいかにチャチなのかを知る」にはいいと思いますが、VBA のクラスを勉強するには適さないと思います。最初はやはり VB/VBA 用のものを参考にされた方がよいでしょう。
お礼
お礼が遅くなりましたがありがとうございました。元々手続き型であるVBが無理やりオブジェクト指向になろうとしたのがVBにおけるクラスモジュールということでしょうか。また勉強します。