• ベストアンサー

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

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

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

  • ベストアンサー
  • 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/7940)
回答No.1

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

PGRXUOHRQRN
質問者

お礼

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

関連するQ&A

  • クラスモジュール

    私は5年位vbaをやっていますが 標準モジュールとフォームモジュールしか使った事が有りません。 エクセルだったらシートモジュールはあります。 クラスモジュールの存在は知って、 学ぼうと思ったのですが 意味がよくわからない為挫折しました。 でも今自分がやりたい事はクラスモジュールがなくても出来ています。 クラスモジュールを学んで使うと もっと作業が捗るのでしょうか? クラスモジュールを使う事のメリットを教えていただけますか?

  • クラスモジュールを使わないとできないこと

    エクセル、アクセスでvbaを利用しています。 現在はすべて標準モジュールに記載しているのですが 「クラスモジュールを使わないとできないこと」もあるのでしょうか? クラスモジュールの使い方、必要性がいまいちわかりません。 まだ初心者な為複雑なコードは作っていません。 よろしくお願いします。

  • subプロシージャーは標準モジュールではなくフォームのコードを書く部分

    subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? エクセルにVBAでフォームを挿入し、 「Private Sub UserForm_Initialize()」 などのフォームのモジュールに、 Sub test() MsgBox "あああ" End Sub という標準モジュールに書くべきのsubプロシージャーを書いてもなにもエラーにならないし正常に動きます。 subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? それともエラーにならなくても標準モジュールに書いた方がいいですか?

  • クラスモジュールについて

    VBを勉強し始めた初心者です。 標準モジュールについては何とかわかるようになってきましたが、クラスモジュールについては、ほとんどわかりません。 クラスモジュールの意味や、プログラム法について初心向けにわかりやすく書いた本等がありましたら、ご紹介下さい。

  • クラスモジュールについて

    笑われてしまうかもしれませんが、クラスモジュールはどんな時に使用するべき なのかが分かりません。 標準モジュールとどう使い分けていけば良いのか教えてください。 また、DLLとOCXも、どう使い分けたら言いか教えてください。 よろしくお願いします。

  • クラスモジュールについて

    はじめまして。 クラスモジュールと標準モジュールの大きな違いは何なんでしょうか?基本的な質問で申し訳ありません。どなたか教えてください。 ma-ki

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

    マイクロソフトのAccess2000でVBAプログラミングを行なっておりますが、 基本的なことを教えてください。 「標準モジュール」と「クラスモジュール」の違いはなんですか? 例えば、どこからでも使えるプロシージャ Public Function getSum( i1 as integer, i2 as interger ) getSum = i1 + i2 End Function を定義したとして、標準モジュール内に書くのとクラスモジュール内に 書くのとでは、何が違ってきますか?その他とにかく「標準モジュール」 とクラスモジュールの違いを教えてください。

  • クラスモジュールの使い方が詳しく書かれたVBAの本

    VBAを勉強中のものです。 クラスモジュールを使いこなせるようになりたいのですが それについてよく書かれている本はありますでしょうか? VBAの勉強している際に読む本は、標準モジュールにコードを記載するよう書かれています。 ご存知の方がいらっしゃいましたらご回答お願いします。

  • 標準モジュールとクラスモジュールについて

    標準モジュールでType型を使用しています。 この標準モジュールをクラスモジュールに置き換えて、Formから呼び出すCOMに作り変えたいのですが、引数ってどう設定したらよいのでしょうか? 今は標準モジュールなので、こんな感じで呼んでいるのですが・・・ 例) Private Sub Command1_Click() Dim in_b As IN_PARA Dim out_b As OUT_PARA in_b.Name = "山本太郎" in_b.Seikaku = "優しい" in_b.Syumi = "釣り" in_b.Tokugi = "野球"

  • VBのフォームモジュールと標準モジュールの使い分け

    VBのフォームモジュールと標準モジュールの使い分けが今一つわかっていません。 フォームモジュールとは、フォーム(画面)上で起こったイベント(例えば、ボタンをクリックした時とか、ユーザーが行を選択したりだとか)の処理を、記述するところと解釈しています。 標準モジュールは、フォームが2つ以上あって、その2つが共通する処理(関数)などを、記述したり、フォームが1つでも、同じ処理を繰り返す場合、その処理を標準モジュールに書いたり・・・・という解釈をしています。 あってますでしょうか? フォームが一つしかない場合、もしくは2つあっても、あまり共通する処理がない場合、なんかは標準モジュールはあまり使わないのでしょうか? それとも、フォームが1つとかでも、今後のメンテの事など考慮して、標準モジュールを作ってそこにグローバル変数なんかで処理を書いた方がよいのでしょうか? どなたか、教えてくださいませんか? いろいろBBSなどで見てみるんですが、いろいろ書いてあって、どれが理想か わかりません。よろしくお願いいたします。

専門家に質問してみよう