Kの備忘録(仮)

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

VBAにおけるPropertyプロシージャとは何か

はじめに

今回は、Propertyプロシージャについて調べていきます。

Propertyプロシージャはクラスでよく使われるらしいのですが、私はまだExcel VBAでクラスを使ったことがありません。まずはPropertyプロシージャの概念と使い方を覚えて後日、クラスの作成に生かしたいと思います。

プロシージャとは

マクロの処理や設定の手続きを行う流れをひとまとめにしたものです。 プロシージャの種類は、以下の3つです。

  • Subプロシージャ
    戻り値なし(戻り値が不要)の手続きをまとめたプロシージャ
  • Functuinプロシージャ
    戻り値ありの手続きをまとめたプロシージャ(戻り値なしも可能)
  • Propertyプロシージャ
    プロパティの作成や設定、操作を行うプロシージャ

今回はPropertyプロシージャにクローズアップします。

Propertyプロシージャの種類

Propertyプロシージャの種類は、以下の3つです。それぞれ用途が異なるので説明します。

  • Property Letプロシージャ
  • Property Setプロシージャ
  • Property Getプロシージャ

Property Letプロシージャ

オブジェクト型以外の値を設定するプロシージャ
戻り値を返せません。

Property Setプロシージャ

オブジェクト型の参照値を設定するプロシージャ
戻り値を返せません。

Property Getプロシージャ

プロパティを取得するプロシージャ
戻り値を返せます。
(Functionプロシージャと同じです)

※Variant型はすべてのPropertyプロシージャで使用することが可能です。

Propertyプロシージャを使う

Propertyプロシージャを使って
「今日の気温を設定して、温度によって体感を回答する」
というプロシージャを作りました。

Private temperature_ As Long

' 呼び出し用のプロシージャ
Sub todays_temperature()

' 今日の気温を設定する
    Temperature = 20
    Debug.Print Experience ' 出力結果:ちょうどよい

End Sub

' Property Letプロシージャで値を設定する
' 今回の場合は、変数temperature_の値をそのまま設定する
Property Let Temperature(newTemperature As Long)
 
    temperature_ = newTemperature

End Property
 
' Property Getプロシージャで値を返す
' 今回の場合は、変数temperature_の値によって、戻り値を変更する
Property Get Experience() As String
 
    If temperature_ >= 30 Then
        Experience = "暑い"
    ElseIf temperature_ >= 15 Then
        Experience = "ちょうど良い"
    Else
        Experience = "寒い"
    End If

End Property

Propertyプロシージャの覚え方

単純に英単語の訳だと以下のようになります。

  • Let:させる
  • Set:設定する
  • Get:手に入れる
  • Property:財産、資産、特質、特性

つまり、少し強引ですが、以下のように考えれば、それぞれの用途が見えてきます。

  • Property Let/Setプロシージャは「特性に値を設定する=値は持っていない」ので、値を戻せない
  • Property Getプロシージャは「特性の値を手に入れる=値を持っている」ので値を戻せる。

おまけ1・変数におけるLetとSet

変数の宣言後に変数へ値を設定します。実はこのときに、(オブジェクト型以外は)「Let」が入っているのですが、省略されています。

' 「Let」を省略する場合
    Dim x As Long
    x = 1

' 「Let」を省略しない場合
    Dim x As Long
    Let x = 1

オブジェクト型の変数に値を設定するときは「Set」を設定しますが、こちらは省略不可です。

    Dim rng As Range
    Set rng = Sheet1.Range("A1")

変数における「LetとSet」も、Propertyプロシージャにおける「LetとSet」と同じような役割ですね。

なお、変数は「値を設定する」のみなので、変数単体では戻り値は返せません。

おまけ2・ExcelのLET関数

Excelのワークシート関数で、変数を決める「LET関数」というものがあります。

support.microsoft.com

以下一部抜粋します。

f:id:lbibouroku:20210810191339p:plain

VBAの変数と同じように、変数を宣言して値を格納し、変数を使って計算できるようですね。

ご興味のある方は、ぜひ上のリンクから記事を読んでみてください。