【VBA】ユーザー定義型(Type)の使い方|複数の関連データをまとめて扱う

目次

はじめに

VBAでプログラムを書く際、一人の従業員に関する情報(社員ID、氏名、入社日など)のように、複数の関連データをひとまとめにして扱いたい場面がよくあります。これらの情報を別々の変数で管理すると、コードが煩雑になり、管理も大変です。

このような問題を解決するのが、「ユーザー定義型」です。Type...End Type ステートメントを使うと、StringLongDate といった既存のデータ型を自由に組み合わせて、あなただけの**オリジナルのデータ型(構造体)**を作成できます。

この記事では、ユーザー定義型を使って、関連するデータを一つの変数にすっきりとまとめる方法を、分かりやすく解説します。


ユーザー定義型の使い方サンプルコード

この例では、従業員情報を格納するための EmployeeRecord という新しいデータ型を定義し、それを使って一人の従業員のデータを管理します。

完成コード

Type の定義は、モジュールの先頭Option Explicit の下など)、どのプロシージャよりも前に記述する必要があります。

' --- ユーザー定義型を定義 ---
' モジュールの先頭に記述
Public Type EmployeeRecord
    EmployeeID As String
    FullName As String
    HireDate As Date
    Department As String
End Type

' --- ユーザー定義型を利用するマクロ ---
Sub ManageEmployeeData()
    
    ' 1. 作成したユーザー定義型で変数を宣言
    Dim employee As EmployeeRecord
    
    ' 2. 各メンバーに値を代入
    employee.EmployeeID = "EMP-007"
    employee.FullName = "山田 太郎"
    employee.HireDate = #4/1/2023# ' 日付リテラル
    employee.Department = "営業部"
    
    ' 3. 格納したデータを参照
    Dim message As String
    message = "社員情報:" & vbCrLf & _
              "ID: " & employee.EmployeeID & vbCrLf & _
              "氏名: " & employee.FullName & vbCrLf & _
              "入社日: " & employee.HireDate & vbCrLf & _
              "部署: " & employee.Department
              
    MsgBox message, vbInformation, "データ確認"

End Sub

コードの解説

Public Type EmployeeRecord ... End Type

EmployeeRecord という名前で、新しいデータ型を定義しています。TypeEnd Type の間に、このデータ型に含めたい要素(メンバー)を 変数名 As データ型 の形式で列挙します。これにより、4つの異なるデータ(文字列2つ、日付1つ)をひとまとめにした EmployeeRecord 型が完成します。

Dim employee As EmployeeRecord

StringLong と同じように、自作した EmployeeRecord 型を使って変数を宣言しています。この employee という一つの変数の中に、IDや氏名などを格納する複数の入れ物が用意されているイメージです。

employee.EmployeeID = "EMP-007"

ユーザー定義型の各メンバーにアクセスするには、 変数名.メンバー名 のように、ドット (.) で繋げて記述します。これにより、どのメンバーに値を代入、またはどのメンバーから値を参照するのかを明確に指定できます。


ユーザー定義型のメリット

1. データの構造化

関連するデータを一つの変数にまとめることで、データの構造が明確になり、コードが非常に分かりやすくなります。

2. コードの可読性と保守性の向上

employeeID, employeeName, employeeDate… と多数の変数を管理する代わりに、employee.EmployeeID, employee.FullName と書けるため、誰が見ても「従業員データの一部である」ことが一目で分かります。

3. 関数の引数をシンプルに

従業員データを別の関数に渡したい場合、ProcessEmployee employeeID, employeeName, ... と多くの引数を渡す必要がありますが、ユーザー定義型を使えば ProcessEmployee employee のように、たった一つの引数で済みます。


まとめ

今回は、VBAのユーザー定義型(Type)を使って、複数の関連データを一つの変数にまとめる方法を解説しました。

  • Type ... End Type で、モジュールの先頭にオリジナルのデータ型を定義する。
  • 変数名.メンバー名 の形式で、各データにアクセスする。

ユーザー定義型は、クラスモジュールほど高機能ではありませんが、データを構造化するためのシンプルで強力な手段です。特に、複数のデータをセットで扱うことが多い場合に、コードの質を大きく向上させてくれます。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次