Excel VBA クラスのプロパティ設定について(Lv.2)

Excel VBA クラスのプロパティ設定について
画像はCanva「Text to Image」で生成しました

前回から「Excel VBAのクラス」について勉強を開始ました。今回はその2回目です。

くるみこ
くるみこ

前回、簡単なクラスを作りましたが、それぞれについての詳しい解説はしませんでした。

今回はプロパティの設定に絞って勉強したいと思います (^^)

私でもわかるように少しづつ進めてくれているんですね。
よろしくお願いしますm(_ _)m

スポンサーリンク
スポンサーリンク

はじめに

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

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

3行目のコード最初の部分「Public Asa As String」がクラスのプロパティです。

今回は、このプロパティ設定についての勉強です。

【この記事でわかること
・クラスのプロパティを設定する方法

スポンサーリンク

クラスのプロパティを設定する

前回確認したオブジェクトブラウザーをもう一度確認してみましょう。

オブジェクトブラウザーでプロパティを確認

上の画像のとおり「Asa」はString型のプロパティとして設定されていることが確認できます。

クラスモジュールのプロパティ設定方法

クラスモジュール「Msg_sample」の宣言セクションに「Public Asa As String」と記述して、モジュールレベルの変数「Asa」プロパティを設定しています。

宣言セクションとは、モジュールの先頭から最初のSubプロシージャまたはFunctionプロシージャまでの間のことです。この宣言セクションで変数を宣言すると、モジュールレベルの変数になります。

モジュールレベルの変数は、モジュール内で共通して使用可能の変数です。

一方、プロシージャ内で宣言して使う変数は、プロシージャレベルの変数です。プロシージャ内でのみ使える変数です。

そして、クラスモジュールの宣言セクションで宣言した変数が、そのクラスのプロパティです。

パブリック変数として宣言する

モジュールレベルの変数を宣言する方法は2種類あります。

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

今回クラスモジュールで宣言しているのはパブリック変数です。

宣言したクラスのプロパティ「Asa」は、クラス内だけでなくプロジェクト内すべてモジュールで使えるということです。

試しに Private で宣言してみたら

宣言を Public から Private に変更してみたらどうなるのでしょうか。

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

プロパティに値を代入する部分でコンパイルエラーになってしまいます。

クラスのプロパティはプライベート変数ではダメだということがわかりました。

クラスのプロパティを設定する変数は、パブリック変数にする必要があるということです。

クラスのプロパティを追加する

「朝の挨拶」のプロパティを設定していますが、他の時間帯の挨拶も設定しておきましょう。

クラスモジュールにプロパティを追加します

クラスモジュールの宣言セクションに、Publicステートメントで追加するプロパティを入力します。

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

・5~7行目が追加した各プロパティ「昼、夜、深夜」の記述です。

・9~12行目のメソッド部分にも、標準モジュールからの呼び出しに対応できるよう、Ifステートメントで各プロパティに分岐するよう手を加えました。

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

追加したプロパティが定義できているかオブジェクトブラウザを確認してみます。

オブジェクトブラウザーでクラスのプロパティをを確認

それぞれ問題なく設定できていますね。

標準モジュールのコードも変更

標準モジュールからクラスモジュールを呼び出すコードの例も変更します。

Option Explicit
'標準モジュールのコードサンプル
Sub MsgTest()
    Dim Say As Msg_sample 'インスタンス化したクラスを入れる変数
    Set Say = New Msg_sample 'クラスをNew(インスタンス化)する
    Dim num As Long
re:
    num = Application.InputBox( _
            "呼び出す時間帯の番号を入力してください" & vbCrLf & _
            "[キャンセル]又は「0」で中止!" & vbCrLf & _
            "1=[朝]、2=[昼]、3=[晩]、4=[深夜]", "番号選択", Type:=1)
    Select Case num
      Case 0: Exit Sub
      Case 1
        Say.Asa = "朝の挨拶:" 'クラスのAsaプロパティに値を代入する
      Case 2
        Say.Hiru = "昼の挨拶:" 'クラスのHiruプロパティに値を代入する
      Case 3
        Say.Ban = "晩の挨拶:" 'クラスのBanプロパティに値を代入する
      Case 4
        Say.Sinya = "深夜の挨拶:" 'クラスのSinyaプロパティに値を代入する
      Case Else
        MsgBox "入力値が不正です!再指定してください。"
        GoTo re
    End Select
    Say.Aisatu 'オブジェクトのメソッドを呼び出す
End Sub

・6行目に InputBox の戻り値を受ける変数(Long)を宣言しています。

・8行目で Application.InputBox (Type:=1)を使ってプロパティを番号で指定できるようにしました。

・12~25行目は、Select Case で Application.InputBox の戻り値を分岐する処理を追加しています。

Application.InputBox「番号選択」

・22~24行目で入力値が不正の場合、再入力させるために GoToステートメントを使っています。

入力値不正メッセージ
正常な結果メッセージ

問題なく動作できていますね。

まとめ(おわりに)

くるみこ
くるみこ

クラスについて2回目の勉強はここでおしまいです。
クラスのプロパティを設定する方法は理解できましたか?
基本的な部分はしっかり覚えてくださいね(^^)

はい!

モジュール変数をパブリックで宣言すればプロパティになるんですね(^^)

プロパティを増やしたらメソッドや呼び出す側も調整が必要なことがわかりました。

くるみこ
くるみこ

はい。そのとおりです。

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

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

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

まとめと感想など

以上、エクセルVBAでクラスにプロパティを追加する方法を紹介しました。

今回おわかった大事なことはこちらです。

・クラスモジュールで宣言したモジュール変数はそのクラスのプロパティになります
・クラスのプロパティを設定する変数はパブリック変数にする必要があります

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

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

Excel VBA クラスの作成・使い方について(Lv.1)
Excel VBA クラスのプロパティ設定について(Lv.2)
Excel VBA クラスにメソッドを設定する方法(Lv.3)
Excel VBA クラスをインスタンス化する方法(Lv.4)
Excel VBA クラス Propertyプロシージャ(Lv.5)
Excel VBA クラス Property Getプロシージャ(Lv.6)
Excel VBA クラス Property Letプロシージャ(Lv.7)
Excel VBA クラス Property Setプロシージャ(Lv.8)
Excel VBA シートの表データからクラスを作成 (Lv.9)
Excel VBA クラス インスタンスをコレクション化(Lv.10)
Excel VBA クラス コンストラクタとデストラクタ(Lv.11)
Excel VBA クラス コンストラクタを利用する方法(Lv.12)
Excel VBA クラス コレクションの要素取得方法(Lv.13)

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

スポンサーリンク

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

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

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

タイトルとURLをコピーしました