Excel VBA クラスにメソッドを設定する方法(Lv.3)

Ecvel VBA クラスのメソッド設定について

「Excel VBAのクラス」について3回目は、メソッドを設定する方法について勉強します。

くるみこ
くるみこ

前回はクラスの「プロパティ」について勉強しました。
今回は「メソッド」を設定する方法に絞って勉強したいと思います (^^)

最初の例では「挨拶文をメッセージボックスで表示する」簡単なメソッドでしたね。
今回もよろしくお願いしますm(_ _)m

目次

はじめに

最初に使ったクラスモジュールのコードがこちらです。

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

クラスについて最初の記事はこちらです。
[https://www.kurumico.com/excel-vba-class1/12057/]

4~6行目のSubプロシージャ部分「Public Sub Aisatu()」がクラスのメソッドです。

今回は、このメソッドの設定についての勉強です。

【この記事でわかること
・クラスのメソッドを設定する方法

クラスのメソッドを設定する

前回記事で使ったコードをオブジェクトブラウザーをもう一度確認してみましょう。

オブジェクトブラウザーでクラスのメンバーを確認

上の画像のとおり「Aisatu」メソッドと「Asa」プロパティが設定されていることを確認できます。

クラスモジュールでメソッドを作成

プロパティは、クラスモジュールの宣言セクションにモジュールレベルの変数で設定しました。

クラスのメソッドは、クラスモジュールに「Subプロシージャ」または「Functionプロシージャ」で宣言して設定します。

ここではSubプロシージャでメソッドを作成しています。

Public Sub Aisatu() '挨拶を表示するというメソッドを定義します
  MsgBox Asa & "おはようございます。" '朝の挨拶を表示
End Sub

これで「Mag_sample」クラスに「Aisatu」メソッドが追加されました。

「Asa」プロパティの値 + “おはようございます” を追加した文字列をメッセージボックスで表示するだけの簡単なメソッドです。

前回コードも確認してみましょう。

Option Explicit
'クラスモジュールのコード
'クラスの名前は Msg_sample です
Public Asa As String   '朝というプロパティを定義
Public Hiru As String  '昼というプロパティを定義
Public Ban As String   '晩というプロパティを定義
Public Sinya As String '深夜というプロパティを定義
Public Sub Aisatu() '挨拶というメソッドを定義します
  If Asa <> "" Then MsgBox Asa & "おはようございます。" '朝の挨拶を表示する
  If Hiru <> "" Then MsgBox Hiru & "こんにちは。" '昼の挨拶を表示する
  If Ban <> "" Then MsgBox Ban & "こんばんは。" '夜の挨拶を表示する
  If Sinya <> "" Then MsgBox Sinya & "おやすみなさい。" '夜の挨拶を表示する
End Sub

プロパティが4つに増えています。

メソッドはプロパティ値を確認して、値のあるプロパティー値 + 対応する文字列をメッセージボックスで表示するという設定に変更しています。

オブジェクトブラウザーを再確認

オブジェクトブラウザーでメソッドを確認

「Msg_sample」クラスのメンバーとして「Aisatu」メソッドと4つのプロパティ「Asa」「Hiru」「Ban」「Sinya」が追加作成されていることが確認できます。

オブジェクトブラウザーに表示されているアイコンの種類で確認できます。

オブジェクトブラウザーのアイコン

クラスモジュールで宣言したSubプロシージャ、またはFunctionプロシージャはそのクラスのメソッドになります。

パブリックプロシージャとして宣言する

前回、2種類の変数の宣言方法を紹介しましたが、プロシージャの場合も同じです。

種類使用ステートメント適用範囲
パブリックPublic Sub プロシージャ名 () プロジェクト内すべて
プライベートPrivate Sub プロシージャ名 () 宣言モジュール内限定

クラスのメソッドの場合も、パブリックで宣言します。

宣言が Private だった場合、前回と同じようにコンパイルエラーになります。

Privateで宣言した場合コンパイルエラーになる

クラスのメソッドを設定するプロシージャは、パブリックにすると覚えておきましょう。

Public Sub と Sub

Publicステートメントを付けなかった場合、既定でパブリックプロシージャになります。

次の画像は、Excel.Workbook のメソッド Activate の詳細ペインを確認したものです。

ブックのメソッドにはPrivateは付いていない例

Sub Activate() はパブリックなのですが、先頭に「Public」は付いていません。

クラスモジュールを使う場合は、パブリックかプライベートかというのは結構重要なので、わかりやすくするために明示するようにした方が良いと思います。

変数では「Dim」を使うところの違いはありますが「Public」や「Private」の適用範囲などの意味は変数と全く同じです。

まとめ(おわりに)

くるみこ
くるみこ

クラスについて3回目、メソッドの勉強はひとまずここでおしまいです。
クラスのメソッドを設定する方法は理解できましたか?
基本的な部分ですからしっかり覚えてくださいね(^^)

はい! メソッドの場合もパブリックで設定するということですね(^^)

エクセル標準のメソッドでは Public が省略されていることもわかりました。

くるみこ
くるみこ

基本的な部分の解説はまだまだ続きます。

次回はクラスのインスタンスを生成する方法について勉強しましょう(^^)/

わかりました。次回もよろしくお願いしますm(_ _)m

まとめと感想など

以上、エクセルVBAでクラスにメソッドを追加する方法を紹介しました。

今回覚えておいてほしい大事なことはこちらです。

・クラスのメソッドはクラスモジュールで宣言したSubまたはFunctionプロシージャです
・クラスのメソッドを設定するプロシージャはパブリックにする必要があります

クラスについて学ぶことはまだまだたくさんあります。次回の解説も是非ご覧ください。

[https://www.kurumico.com/excel-vba-class4/12159/]

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

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

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

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

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

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