No.3ベストアンサー
- 回答日時:
クラスモジュールのメリットは、自作のオブジェクトが作れる事です。
オブジェクト自体がデータを保持し、相互のやりとりを自律的に管理してくれる事でプログラムが楽になる、あるいは手続き型では困難な事ができる様になる事ではないかと思います。いわゆるオブジェクト指向?
下記は、オブジェクト自体がデータを保持する事を利用した例です。
http://oshiete.goo.ne.jp/qa/5070895.htmlのNo.3
オブジェクト自体がデータを保持しているので、シート間にまたがり、一個ずつずれていく10個のデータの平均をどうやって計算するかなんて難しい事を考えなくても、トコロテン式にデータを一個ずつ与えていく事で、順次計算できています。
上の例では、オブジェクトは1個のみでしたが、次の例では会社毎にインスタンスを生成し、オブジェクト内で、連続データか否かの判別をしています。
http://oshiete.goo.ne.jp/qa/4079564.htmlのNo.2
出来が良いかどうかは別として(No.2の方ですよ)、手続き型のコードとの違いが分かると思います。多重ループを考える頭が無いだけとか...
http://oshiete.goo.ne.jp/qa/7405107.html
また、クラスモジュールでは自作のイベントを起こすことができます。
http://oshiete.goo.ne.jp/qa/5437595.htmlのNo.3
その応用編として、ユーザーフォームのコマンドボタン等のコントロールのイベントを引き継いだクラスを用いる事で、コントロールの配列的な機能が実現できます。これにより、コントロール個別にコードを書く必要がなくなり、また具体的なコントロール名を使わないで済ませれば、使い回しがしやすくなります。
http://okwave.jp/qa/q7947371.html
http://oshiete.goo.ne.jp/qa/7870295.html
VBAのクラスモジュールは書き方に変なお約束があって、これが敷居を高くしているかもしれませんね。VBAはオブジェクト指向言語ではないと言われますが、オブジェクトであるRangeを使いこなしていれば、立派にオブジェクト指向していると、勝手に思っています。
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
No.1
- 回答日時:
ダラダラと書けば長くなりますが,簡単にまとめると。
たとえばアプリケーションオブジェクトでイベントを使用するには,クラスモジュールにApplication型のオブジェクト変数を宣言する必要があります。
たとえば構造化された変数を定義するには,クラスモジュールを使う必要があります。
参考
http://www.excellenceweb.net/vba/class/what_vba_ …
一般ユーザーがクラスを使って何かする事はありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- バッテリー・充電器・電池 AC-DC電源モジュールの選択について教えてください 3 2022/04/24 11:44
- Visual Basic(VBA) マクロについて教えてください。 1 2023/06/06 00:57
- Excel(エクセル) VBAで、㉑という数値が、正しく、入力できない 2 2022/07/26 20:22
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- ルーター・ネットワーク機器 PCをWI-FI化(現在は有線) 9 2023/01/16 08:20
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- 一眼レフカメラ SFP モジュールについて 1 2023/06/04 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
パワーポイントのVBAでテキスト...
-
CoCreateInstanceでエラーになる。
-
複数TBLのオブジェクトを1つの...
-
Excelで =EMBED("Acrobat Docu...
-
オブジェクトと関数の違い
-
ADO オブジェクトの渡し方
-
EXCEL VBAにて動的にCheckBOXを...
-
VBA 同じ名前のオブジェクトを...
-
JAVAからHTMLへ値を返す方法
-
XAMLの動的生成について
-
CFileDialogでフォルダだけを選...
-
bmp画像をjpegやpng画像に圧縮...
-
ASP.net 教えてください!!(...
-
C# Proxyを通してブラウザを開...
-
COMコンポーネントって何?
-
VBSでのステートメントの末尾が...
-
BufferedWriterのcloseメソッド
-
Excelファイルをgrep検索したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
vb.net オブジェクト指向につい...
-
COMコンポーネントって何?
-
オブジェクトレベルとメタレベル
-
ビジュアルC++でボタンの有...
-
時間帯判定をする。
-
LISTBOXの内容が更新されま...
-
VBA 同じ名前のオブジェクトを...
-
オブジェクト名をforループ内で...
-
Object型からDouble型へのキャスト
-
ADO オブジェクトの渡し方
-
bmp画像をjpegやpng画像に圧縮...
-
Vbで通常使用するプリンターを...
-
戻り値がクラスオブジェクト
-
VBAでvlookup関数から、別シー...
おすすめ情報