Kの備忘録(仮)

Python、VBA、Excelを中心に記事を投稿

Excel VBAのクラスを学ぶ1

はじめに

以前「Excel VBAのクラスを学ぶ前の準備 - モジュールとプロパティ -」という記事を書きました。 (現在受講中VBAの講座内容です)

lbibouroku.hatenablog.com

先日とうとうクラスの講座を受講しました!

まだまだ理解不足のところもありますが、そこで学んだことをまとめたいと思います。

◆目次◆

クラスがあると何ができるのか?

  • クラス:設計書(オブジェクトとそのメンバーを定義)
  • インスタンス化:クラスから実体のオブジェクトを生成

つまり、設計書をもとにオブジェクトが生成できます。 利点は、複数のオブジェクトが作れるので、コードの管理がしやすくなります。

クラスモジュールの作り方

  1. 挿入→クラスモジュール
  2. プロパティウィンドウのオブジェクト名を編集してクラスの名前をつける

オブジェクトの作り方

  1. クラスモジュールを作成する
  2. 標準モジュールでクラス型の変数を宣言し、インスタンス化する

例:人間の設計図として、Personクラスを作成し、オブジェクトを生成

'[Person]クラスモジュールを作成後に
'[Module1]で以下を宣言すると、オブジェクトが生成される

Dim myPerson As Person
Set myPerson = New Person

まだこの段階ではPersonクラスモジュールに何も書いていないので、設計図の中身がない状態です。

では、クラス(設計図)にプロパティを加えます。

クラスにプロパティを定義する方法

オブジェクトにプロパティを追加する方法と同じです。

  • モジュールレベル変数
  • Property Let/Setプロシージャ
  • Property Getプロシージャ

例:Personクラスに名前と年齢の設定を追加

'[Person]クラスモジュールにプロパティを追加する
Public Name As String
Private age_  As Long

Public Property Get Age() As Long
    Age = age_   
End Property

Public Property Let Age(ByVal newAge As Long)
    If newAge > 0 Then
        age_ = newAge
    Else
        age_ = 0
    End If      
End Property

'[Module1]で以下のように宣言すると
'Personクラスの設計図をもとにmyPersonオブジェクトが生成され
'myPersonオブジェクトに名前と年齢が設定できる
Sub personclass_test1()
    Dim myPerson As Person
    Set myPerson = New Person
    
    myPerson.Name = Bob
    myPerson.Age = 15   
End Sub

クラスにはメソッドも定義できますが長くなるので、続きは次回にします。