事務職のためのExcelVBA入門講座 > VBAの応用知識 > クラスとは

VBAの応用知識

クラスとは

Excelのマクロを書くのには、標準モジュールを使いますが、
実は、標準モジュールだけではなく、
クラスモジュールというモジュールもあります。
クラスとは01

私は最初、どういうものなのか、なかなか理解できませんでした。
Excelの本の解説を読んでみても何だかわかったような、わからないような・・・・・・。

最近では「なんとなく、こうじゃないかな?」というのがわかってきたので書いてみます。

クラスとは、オブジェクトのフォーマットようなものです。
「クラスとはなにか」「クラスモジュールで何ができるか」ということを説明します。

前提:オブジェクトの種類が同じなら、メソッド・プロパティの種類も同じ



クラスを説明する前提として、「オブジェクトの種類が同じなら、メソッド・プロパティの種類も同じになる」というものがあります。
たとえば、シート1とシート2の2つのWorkSheetオブジェクトがあるとします。

シート1にはCopyメソッドがあるけどシート2にはCopyメソッドがない、ということはありえません。
また、シート1にはNameプロパティがあるけどシート2にはNameプロパティがない、ということもありえません。

プロパティは共通で、それぞれのプロパティに入っている値が違うだけなのです。
クラスとは02

なぜクラスが必要か


項目が同じなら、毎回いちいち新しく作るよりも、あらかじめフォーマットを作っておいた方が効率的です。

たとえば、「毎月報告書を出す」といった場合も、毎回まっさらなファイルからは作りませんよね。
1つフォーマットを作っておいて、使うときにフォーマットをコピーし、コピーしたものに書くと思います。

クラスもそれと同じです。

毎回、メソッドとプロパティを全部定義するのは大変。
だから、クラスというフォーマットを作っておくわけですね。

クラスには
・オブジェクトのメソッド
・オブジェクトのプロパティ
・プロパティの初期値

などを定義しておきます。


オブジェクトを使うときは、クラス(フォーマット)のプロパティに直接
値を入れてしまうと、初期値がわからなくなってしまいます。

そのため、フォーマットを使うときは必ずコピーし、コピーしたオブジェクトのプロパティに値を入れます。

クラスからコピーされたオブジェクトのことを「インスタンス」といい、
クラスからコピーしてオブジェクトを作ることを「インスタンス化」といいます。
クラスとは03

VBAでインスタンスを作成する


WorkSheetオブジェクトなど、Excelにもともとついている機能に関しては
Excelが自動的にインスタンスを作ってくれるため、特に意識する必要はありません。

どういうときに使うかというと、FileSystemObjectやADODBといった
外部ライブラリのオブジェクトを使うときに使います。

変数の宣言をするとき、データ型の前にNewキーワードをつけると
変数の宣言とともにインスタンスを作成します。

◆サンプルコード
*FileSystemObjectの場合。MicrosoftScriptiongRuntimeの参照設定が必要です。
Dim FSO As New FileSystemObject



変数を宣言した後でインスタンスを作成したい場合は、
Setステートメントを使います。

◆サンプルコード
Set FSO = New FileSystemObject


参照設定をしない場合は、CreateObject関数を使います。
◆サンプルコード
Set FSO = CreateObject("Scripting.FileSystemObject")


クラスモジュールがなにができるか


クラスモジュールとは、クラスを作るためのモジュールです。
クラスとは、オブジェクトのメソッドとプロパティを定義したオブジェクトのフォーマットでした。

つまり、クラスモジュールを使うとオリジナルのメソッドとプロパティをもつオブジェクトが作れるようになるのです。

ただ、事務作業でそれほど高度なことを求められることは、ほとんどないでしょう。

外部ライブラリを利用するときに、Newキーワードでインスタンスを作成する方が、お世話になる頻度が高いです。

<<項目ごとに集計する 項目が複数ある場合のクロス集計 | 事務職のためのExcelVBA入門講座トップへ | 実際にマクロを作りはじめる前に>>

この記事へのコメント

コメントを書く

お名前
メールアドレス
URL
コメント
[必須入力]
認証コード
[必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック


Powered by Seesaa
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。