• ベストアンサー

クラスモジュールを使う事によって何が出来るようにな

クラスモジュールを使う事によって何が出来るようになるのですか? 私は今標準モジュールとフォームモジュールでしかコードを書いた事がないのですが クラスモジュールの使い方やクラスモジュールにコードを書くことによって出来ることがわかりません。 今の所、クラスモジュールを使わなくても業務が問題なく遂行されているのですが クラスモジュールを使う事によってどんなメリットがあるのでしょうか? エクセルです。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

クラスモジュールのメリットは、自作のオブジェクトが作れる事です。 オブジェクト自体がデータを保持し、相互のやりとりを自律的に管理してくれる事でプログラムが楽になる、あるいは手続き型では困難な事ができる様になる事ではないかと思います。いわゆるオブジェクト指向? 下記は、オブジェクト自体がデータを保持する事を利用した例です。 http://okwave.jp/qa/q5070895.htmlのNo.3 オブジェクト自体がデータを保持しているので、シート間にまたがり、一個ずつずれていく10個のデータの平均をどうやって計算するかなんて難しい事を考えなくても、トコロテン式にデータを一個ずつ与えていく事で、順次計算できています。 上の例では、オブジェクトは1個のみでしたが、次の例では会社毎にインスタンスを生成し、オブジェクト内で、連続データか否かの判別をしています。 http://okwave.jp/qa/q4079564.htmlのNo.2 出来が良いかどうかは別として(No.2の方ですよ)、手続き型のコードとの違いが分かると思います。多重ループを考える頭が無いだけとか... http://okwave.jp/qa/q7405107.html また、クラスモジュールでは自作のイベントを起こすことができます。 http://okwave.jp/qa/q5437595.htmlのNo.3 その応用編として、ユーザーフォームのコマンドボタン等のコントロールのイベントを引き継いだクラスを用いる事で、コントロールの配列的な機能が実現できます。これにより、コントロール個別にコードを書く必要がなくなり、また具体的なコントロール名を使わないで済ませれば、使い回しがしやすくなります。 http://okwave.jp/qa/q7947371.html http://okwave.jp/qa/q7870295.html VBAのクラスモジュールは書き方に変なお約束があって、これが敷居を高くしているかもしれませんね。VBAはオブジェクト指向言語ではないと言われますが、オブジェクトであるRangeを使いこなしていれば、立派にオブジェクト指向していると、勝手に思っています。

PGRXUOHRQRN
質問者

お礼

ありがとうございました。

その他の回答 (2)

回答No.2

一般論としては、クラスというものは、オブジェクト(シートやワークブック)への、一種の設計図のようなものです。それを書くというのは、いわば既存の設計図を書き換えることが出来るということです。 クラスの使い方で、書籍などで良く知られたものとしては、NewWorkbook (新規に開いたブック)にイベントを付けるものです。(この書き込みの最後にサンプルを載せます)クラスを、インスタンスにするということになります。こればかりは、他に方法がありません。開いた瞬間に、マクロをコピーするということをすれば別ですが、一般的にはクラスで操作します。 私たちが、実際に使用するのは、コントロール(ActiveX)のプロパティを増やしてやるとかが多いような気がします。特に、コントロール(ActiveX)は、コントロール配列がありませんから、そういう場合に、クラスを活用し、インデックスをつけてあげます。また、同じ内容のコードを統合することが可能ですから、100個のコントロール・イベントがあっても、一つのプロシージャで済みます。主に、UserFormなどの固有のオブジェクトの中で使うものに用いられます。 メソッドやプロパティを設けるというのもクラスで行いグローバル化(ブックを越えて働く)はしますが、VBAにとっては、あまり有用だとは思いません。 ここの掲示板では、あまり見ない種類の内容で、なかなか敷居が高いものかもしれません。 お分かりになりましたでしょうか。話が見えてこないようでしたら、ご自身には不要なものだと割り切ったほうがよいです。 例えば、このようなものです。古いタイプのコードですが、書式のスタイルの標準を書き換えるものです。 '// 'Class1 Public WithEvents App As Application Private Sub App_NewWorkbook(ByVal Wb As Workbook)   With Wb.Styles("Normal")     .HorizontalAlignment = xlRight     .VerticalAlignment = xlCenter   End With   Wb.Saved = True End Sub 'Module1 Public myClass As New Class1 Sub Auto_Open()   Set myClass.App = Application End Sub

PGRXUOHRQRN
質問者

お礼

ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ダラダラと書けば長くなりますが,簡単にまとめると。 たとえばアプリケーションオブジェクトでイベントを使用するには,クラスモジュールにApplication型のオブジェクト変数を宣言する必要があります。 たとえば構造化された変数を定義するには,クラスモジュールを使う必要があります。 参考 http://www.excellenceweb.net/vba/class/what_vba_class.html 一般ユーザーがクラスを使って何かする事はありません。

PGRXUOHRQRN
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう