Tips

ExcelVBAを1から学ぶ! #8 ~ユーザー定義型~
2017.06.28

ExcelVBAを1から学ぶ! #8 ~ユーザー定義型~

はじめに

前回のおさらいと今回やること

前回は配列に関して学習しました。今回はユーザー定義型に関してです。

ユーザー定義型とは?

ユーザー定義型の概要

前回学習した配列は、一つの変数に複数の値が格納できるというメリットがありました。しかしながら、複数の値は同じデータ型でなければならないという制約があります。複数の異なるデータ型の値を、一つの変数で取り扱いたい場合に使用するのがユーザー定義型です。

下図の表を参考にしながら解説していきます。

このようなテーブルの場合、「ID」「氏名」「住所」「電話番号」がひとまとめになった配列が有効に使えます。しかし、IDには整数値、氏名・住所・電話番号には文字列がそれぞれ格納されることになるので、通常の配列ではこれが実現できません(IDに入る値は文字としての「1」です!ということなら可能ですが…)。そこで、異なるデータ型のセットが作れるユーザー定義型の登場です。

ユーザー定義型の使い方

では実際にユーザー定義型を使ってみたいと思います。手順としては、

①ユーザー定義型を宣言する
②変数宣言の際に「As ユーザー定義型名」と記述する

たったこれだけです。

①ユーザー定義型を宣言する

ユーザー定義型の宣言は、宣言セクション(全てのプロシージャを記述する前、ファイルの先頭)にて、

Type ユーザー定義型名称

変数名 As データ型
変数名 As データ型
変数名 As データ型

End Type

のように行います。それぞれの変数でデータ型は同じでも異なっていても構いません。今回のテーブルを例にすると、


Type Profile

 id As Integer
 name As String
 address As String
 phonenum As String
End Type

となります。

②変数宣言の際に「As ユーザー定義型名」と記述する

ユーザー定義型配列に、テーブルの値を格納するプロシージャを作成します。


Sub sample8_1()

 Dim wholetable(2) As Profile
 Dim i As Long, j As Long

 For i = 2 To 4

  wholetable(i - 2).id = Cells(i, 1)
  wholetable(i - 2).name = Cells(i, 2)
  wholetable(i - 2).address = Cells(i, 3)
  wholetable(i - 2).phonenum = Cells(i, 4)
 Next
End Sub

この中の、「Dim wholetable(2) As Profile」の部分が、「固定長配列wholetableにユーザー定義型Profileを使用します」ということを表しています。
ユーザー定義型を使用すると、

配列変数名(配列のインデックス番号).ユーザー定義の変数名

という形で、各値を操作することが可能となります。図のイメージは下の通りです。

配列の要素の中に小分けの部屋が出来ており、ひとつひとつに名前が付いています。

デバッグ方法は前回のExcelVBAを1から学ぶ! #7 ~配列とは?~にありますので、同じようにして配列内に要素が格納されているか確認しましょう。

まとめ

今回はユーザー定義型に関してでした。メリットとして、異なるデータ型をセットで扱えるほか、要素名を自分の分かり易い形で定義できることが挙げられます。有効に使ってみてください。

次回はステートメントについてです。

 

excel_VBAを学んで業務効率化!

excel-vba入門 連載

Recent News

Recent Tips

Tag Search