Excel VBA クラスの作成・使い方について(Lv.1)

Excel VBA クラスの作成・使い方について(Lv.1)
くるみこ

今回からクラス(class)を作成する方法やクラスの使い方について、いっしょに勉強していきたいと思います!
第1回目はクラスモジュールの使い方を確認しましょう (^^)

わぁ~クラスですか~なんかすごく難しそうです(^^;)
私でもわかるようになるのかなぁ?
よろしくお願いしますm(_ _)m

目次

はじめに

クラスとは、オブジェクトを作るための「設計図」のようなもので、プロパティ(属性)とメソッド(操作)を定義したものです。

クラスで定義した「設計図」自体もオブジェクトです。オブジェクトとは、VBAで操作可能なあらゆる対象のことで、Excelのブックをはじめセルやワークシートなどもオブジェクトです。

VBAでクラスを定義する場所がクラスモジュールです。クラスモジュールで「設計図」を作る、それを標準モジュールでクラスを「New演算子」で呼び出して実際に作ったものがインスタンスです。

クラス ⇒ 「概念」 ⇔ オブジェクト ⇔ 「モノ」 ⇐ インスタンス

【この記事でわかること
・クラスモジュールを挿入する方法
・簡単なクラスを作成して確認する方法

クラスを作ってみましょう

まずは簡単なクラスを実際に作ってみた方がわかりやすいと思うのでやってみましょう。

空のクラスモジュールを作成します

VBE (Visual Basic Editor)メニューから、挿入 > クラスモジュールを選択して、新しいクラスモジュールを作成します。※右クリックメニューからでもOKです。

クラスオブジェクトを挿入する

最初にクラスモジュールを挿入した時点では「Class1」という空のクラスモジュールが作成されます。

中身は何もない「空」の状態ですが、クラスモジュール(クラス)を作ることができました。

クラスに「設計図」を書いていきます

作成したクラスモジュールにプロパティやメソッドなどのコードを書いて「設計図」を定義していきます。

定義することで「Rangeオブジェクト」などのように「Class1オブジェクト」を操作することがでるようになります。

サンプルとして「朝の挨拶」メッセージを表示するクラスを作ってみます。

クラス名を変更します

では、まずクラスモジュールの名前(クラス名)を変更しましょう。次の画像の場所で変更します。

クラスオブジェクト名を変更

初期設定は「Class1」のようになっていますが、名前は自由につけることができます。名前を変更する際は、できるだけ名前で機能がわかるような名称に変更したほうがわかりやすいでしょう。

ここでは挨拶のメッセージを表示するクラスなので「Msg_sample」と変更しました。

クラス名変更確認

各種定義を設定します

クラスモジュールの中に、例えば次のようなコードを書いてプロパティとメソッドを定義します。

Option Explicit
'クラスモジュールのコード
'クラスの名前は Msg_sample です
Public Asa As String  '朝というプロパティを定義
Public Sub Aisatu() '挨拶を表示するというメソッドを定義します
  MsgBox Asa & "おはようございます。" '朝の挨拶を表示
End Sub

・「Asa」というプロパティを1つだけ定義しています。

・「Aisatu」というメソッドを1つだけ定義しました。

・メソッドは「Sub」や「Function」などで定義します。ここでは「Sub」を使っています。

標準モジュールからクラスを利用します

標準モジュールからクラスモジュールを呼び出している例です。

Option Explicit
'標準モジュールのコードサンプル
Sub MsgTest()
    Dim Say As Msg_sample 'インスタンス化したクラスを入れる変数
    Set Say = New Msg_sample 'クラスをNew(インスタンス化)する
    Say.Asa = "朝の挨拶:" 'オブジェクトのプロパティに値を代入する
    Say.Aisatu 'オブジェクトのメソッドを呼び出す
End Sub

・4行目、「Say」はクラスをインスタンス化したオブジェクトを入れる変数の定義です。

・5行目、「New演算子」でクラスをNew(インスタン化)して「Say」にセットしてクラスを使用できるようにしています。

・「Say」オブジェクトの「Asa」プロパティに値(文字列)を代入しています。

・「Say」オブジェクトのメソッド「Aisatu」を呼び出(実行)しています。

Msg_Testの実行結果のメッセージボックス

※ プロパティやメソッドについての詳しい解説は、次回以降に改めて勉強しますのでここでは省略します。

オブジェクトブラウザーで確認します

オブジェクトブラウザーを使うと、コード内で使用するオブジェクトのメソッドやプロパティなどのメンバー構成を確認できます。

オブジェクトブラウザーは、VBEのメニューから、クラスを選択した状態で、表示 > オブジェクトブラウザーを選択して開くことができます。または、画像のアイコンをクリックするかショートカット「F2」でもOKです。

VBEオブジェクトブラウザーでクラスを確認

右側の「メンバー」ボックス部分を見ると、「Aisatu」メソッド「Asa」プロパティがメンバーに入っていることが確認できます。

クラスモジュールに、メソッドやプロパティを追加して書き込んでいくとこの場所に追加表示されます。「メンバー」ボックス部分をダブルクリックすればクラスモジュールが開きます。

クラスモジュールにコードを書いていくことで、WorksheetオブジェクトやRangeオブジェクトのように、もっとたくさんの「オブジェクト」を追加していくことが出来るわけです。

まとめ(おわりに)

くるみこ

クラスについて初回の勉強はこのくらいにしておきましょう。
クラスモジュールの作り方は理解できましたか?
しっかり覚えてくださいね(^^)

はい! クラスモジュールの作り方はわかりました(^^)
でも、メソッドやプロパティについてはまだよくわかりません(^^ゞ

くるみこ

はい。最初だから本当に単純なクラスを作ったのでまだまだこれからですよ。まだ プロパティやメソッドの部分を詳しく解説していません。
次回は、プロパティを追加する方法について詳しく勉強したいと思います。

わかりました。次回が楽しみです。復習をしっかりして準備しておきま~す!

まとめと感想など

Excel VBAでは、エクセルやVBAが提供するクラス(ワークシートやセルなど)だけではなく、クラスモジュールを使って、自分でクラスを作ることができます。

クラスを使うことで、(ワークシートやセルなどと同じように)コードを整理したり再利用したりすることが出来るようになります。

クラスについて学ぶことはまだまだたくさんありますが、一つずつ理解していくようにしましょう。

・クラスモジュールを挿入する方法がわかりました
・簡単なクラスを作成して確認する方法もわかりました

Excel VBA クラスについての記事一覧

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

過去記事のサンプルファイルをダウンロードできます

この記事のサンプル登録はありません。記事内のコードをご利用ください。

過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次