Developer

【ExcelVBA】ユーザ定義型①
2021.07.19
Lv1

【ExcelVBA】ユーザ定義型①

オブジェクト変数とは

配列のところで説明しましたが、配列や変数は指定した同一の型のものしか格納することができません。
Interger型の配列を用意した場合、数値を複数代入することができますが、数値と文字列を代入することはできません。
もし複数のユーザの名前と年齢を格納したいと思った場合、文字列型の名前と数値の年齢を複数格納する必要がありますが、1つの配列ではできません。
名前を保持する配列と年齢を保持する配列の2つを用意すればとりあえず保持することはできますが、2つの配列が連動しているわけではないため、管理が面倒になります。

こうした異なる型のデータをひとまとめにして、値を保持しておきたい場合に使用することができるのがユーザ定義型です。
数値や文字列を格納できる型を新たに定義するといったようにユーザ定義型は使用者が独自に型を定義することになります。

ユーザ定義型の定義

まず使用するためにはどういった値が格納されるのかを定義する必要があります。
定義は最初のプロシージャよりも上の宣言セクションで行います。

Type 定義型の名前
	要素名 As 型
	要素名 As 型
	要素名 As 型
	・
	・必要な数だけ定義
	・
End Type

ユーザ定義型を定義したらあとは変数の宣言時にその型を指定します。
各要素は変数のように扱うことができます。その値を操作する場合は、変数名の後ろに「.」をつけて要素名を指定します。

ユーザ定義型のサンプル

ではユーザ定義型を実際に定義してみましょう。
名前と年齢をまとめて扱うためのユーザ定義型を定義するには以下のように行います。

Type Person             'ユーザ定義型を定義
    name As String      '名前を格納する要素
    age As Integer      '年齢を格納する要素
    
End Type

Sub VBA基礎第30回_1()
   Dim student As Person
   
   student.name = "鈴木"        'ユーザ定義型の要素にアクセスするにはドットをつけて指定します
   student.age = 20
   
   MsgBox student.name & " " & student.age
    
       
End Sub

シートモジュール上で実行しようとすると以下のエラーが表示されます。

標準モジュール上であればPrivateをつけなくても動作しますがシートモジュール上で定義する場合、
Privateをつけないとエラーとなります。
文字列が格納できるnameと数値が格納できるageを要素にもつPersonという型を定義しています。
定義した型を指定したstudent変数を宣言し、各要素に値を格納しています。
結果は以下のようになります。

このようにまとめて管理したいデータを1つの型として定義できるのがユーザ定義型です。

まとめ

複数のデータをまとめて管理するためにユーザ独自で定義できるユーザ定義型というものがあります。
宣言セクションでTypeを使用して型を定義します。
ユーザ定義型の要素は「.」ドットを使用してアクセスします。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

・ユーザ独自の型を定義したいときに使用できるのが○○○です。
・定義するには宣言セクションで○○○を使用します。

答え


・ユーザ独自の型を定義したいときに使用できるのがユーザ定義型です。
・定義するには宣言セクションでを使用します。

次回は、「ユーザ定義型②」です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次