こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

クラスモジュールを使う事によって何が出来るようになるのですか?
私は今標準モジュールとフォームモジュールでしかコードを書いた事がないのですが
クラスモジュールの使い方やクラスモジュールにコードを書くことによって出来ることがわかりません。

今の所、クラスモジュールを使わなくても業務が問題なく遂行されているのですが
クラスモジュールを使う事によってどんなメリットがあるのでしょうか?
エクセルです。

投稿日時 - 2013-03-25 20:14:09

QNo.8011387

暇なときに回答ください

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

クラスモジュールのメリットは、自作のオブジェクトが作れる事です。
オブジェクト自体がデータを保持し、相互のやりとりを自律的に管理してくれる事でプログラムが楽になる、あるいは手続き型では困難な事ができる様になる事ではないかと思います。いわゆるオブジェクト指向?
下記は、オブジェクト自体がデータを保持する事を利用した例です。
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を使いこなしていれば、立派にオブジェクト指向していると、勝手に思っています。

投稿日時 - 2013-03-26 00:12:29

お礼

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

投稿日時 - 2013-05-18 21:40:58

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2013-03-25 22:08:49

お礼

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

投稿日時 - 2013-05-18 21:40:55

ANo.1

ダラダラと書けば長くなりますが,簡単にまとめると。
たとえばアプリケーションオブジェクトでイベントを使用するには,クラスモジュールにApplication型のオブジェクト変数を宣言する必要があります。
たとえば構造化された変数を定義するには,クラスモジュールを使う必要があります。

参考
http://www.excellenceweb.net/vba/class/what_vba_class.html


一般ユーザーがクラスを使って何かする事はありません。

投稿日時 - 2013-03-25 20:38:34

お礼

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

投稿日時 - 2013-05-18 21:40:53

あなたにオススメの質問