• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:標準モジュールとクラスモジュールの違い)

標準モジュールとクラスモジュールの違い

このQ&Aのポイント
  • 標準モジュールとクラスモジュールの違いをまとめます。
  • 標準モジュールはどこからでも使えるプロシージャを定義するのに対し、クラスモジュールは特定のオブジェクトに関連するプロシージャを定義します。
  • 標準モジュールは値を保持しないが、クラスモジュールはインスタンス化されるオブジェクトが値を保持できます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 用のものを参考にされた方がよいでしょう。

noname#21585
質問者

お礼

お礼が遅くなりましたがありがとうございました。元々手続き型であるVBが無理やりオブジェクト指向になろうとしたのがVBにおけるクラスモジュールということでしょうか。また勉強します。

関連するQ&A