「Excel」VBAでいろんなデータ型を一つに集約してみる

 

こんばんは、こんにちは、おはようございます。( ノ゚Д゚)おやすみなさい! とっちーです。

本日は、VBAでexcelシートのセルに使用できる基本の56色を表示させてみるコードを作成してみました。

ただ表示させただけですが。

実は、これには続きがあります(未定)を期待してワクワクしながらみてね。

 

 

ユーザー定義型のデータ型を作成するに必要なコード

 

変数を宣言するときに同じタイプのデータ型を複数宣言するのって、密集した団地みたいなコードが出来そうです。

 

Dim SYA(3) As String
Dim SYA_age As Long
Dim SYA_nen As Date

Dim YYA(3) As String
Dim YYA_age As Long
Dim YYA_nen As Date

 

こんなとき、データ型の種類に関係ないデータ型を作成できたら便利になりそうです。

 

その方法は、Typeステートメントで作成が可能です。

 

Typeステートメントとは

 

ユーザーが必要な分のデータ型を集約して作成可能なユーザー定義型の型を作成することが可能なんです。

 

コードもすっきりして見やすくなったり、宣言の仕方によっては、プロシージャを超えて利用可能なんです。

 

 

そんな参照渡しのみ使用可能なTypeステートメントですが。「値渡しは出来ません。」

 

Type ステートメントを使ってユーザー定義型を作成してみると、どうなるか試してみます。

 

ちなみにType ステートメントは、動作範囲はモジュールレベルでの使用に限ります。

 

Typeステートメントの注意点

 

まずTypeステートメントは、設定可能な位置があります。

 

コードウインドウでType~End Typeを記述する場合は、必ず実行プロシージャより上に記述を行うようにしましょう。

 

逆に記述した場合は、コンパイルエラーのダイアログが表示され処理が中断されます。

 

しかも「定義されてませ~ん」って告知をされます。

 

気持ち的には「あの~してるんですけど探してよ」ってなりますが、規定上無理です。

 

必ず上位に記述するようにしましょう。

 

以下記述方法の見本です。

 

 

記述方法の確認をしましょう。

必ず使用するプロシージャよりも先にコードを記述しましょう。

 

 

ユーザー定義型の作成

 

Public Type HAKOHEYA

DOOM1(3) As String ‘部屋を3部屋用意
DOOM2 As Long ‘変数に数値
DOOM3 As Date ‘変数に日付

End Type

 

 

今回は、HAKOHEYAの名で作成してみました。

 

Typeのコードの前の「Public」は省略可能です。

 

「Private」と違い、すべてのプロシージャとすべてのモジュールから参照可能なユーザー定義型を宣言出来ます。

 

上記の名前が決まったら、ステートメントをコードに足していきます。

 

「Private」を頭に書き足すと、宣言をしたモジュール内でのみ参照可能な定義型を宣言できます。

 

 

 

(はてな君)
なにがちがうのかな?

 

(えっちゃん)
変数宣言をしている部分をみてごらん

 

(はてな君)
あ、変数の型とTypeの右側が同じ!

 

Typeステータスは配列型の作成も可能

 

Type HAKOHEYA

DOOM1(3) As String ‘部屋を3部屋用意
DOOM2 As Long ‘変数に数値
DOOM3 As Date ‘変数に日付

End Type

 

HAKOHEYAのお手製型には、変数の代入先に文字型を3箱、長整数型を1箱、日付時刻型を1箱記述しました。

 

これをSubプロシージャ内で変数宣言に活用します。

 

Dim i As Integer ‘繰り返しカウント用の整数型

Dim SYA As HAKOHEYA ‘元データレコード1

Dim YYA As HAKOHEYA ‘元データレコード2

 

一番上のIntegerなら見慣れていると思いますが、普段よく使用する整数型のデータ型です。

 

2行目と3行目の変数SYAとYYAのデータ型を設定する箇所には、なにやら見たことのない型の名前「HAKOHEYA」がありますが、これは先ほど作成したTypeステートメントのユーザー定義型の名前とです。

 

つまりSYSやYYAという変数を宣言するときにTypeステートメントで作成したユーザー定義型で宣言を行うと、Typeステートメント内に記述したデータ型の文字型を3箱、長整数型を1箱、日付時刻型を1箱の計3つの種類の違う変数を使用できるレコードみたいなデータ型を作成することが可能なんです。

 

Typeステータスでつくったデータ型を使ってみる

 

今回は、単純に変数に値を代入してメッセージボックスで表示させてみます。

 

‘単純にコードに記入
SYA.DOOM1(1) = “SIMEI”
SYA.DOOM1(2) = “NAMAE”
SYA.DOOM1(3) = “SEIBETU”
SYA.DOOM2 = 46
SYA.DOOM3 = “2002/07/08 09:08:30”

YYA.DOOM1(1) = “KYUSIMEI”
YYA.DOOM1(2) = “KYUNAMAE”
YYA.DOOM1(3) = “KYUSEIBETU”
YYA.DOOM2 = 46
YYA.DOOM3 = “2002/07/08 10:10:10”

‘—–ここまで

For i = 1 To 3
MsgBox SYA.DOOM1(i)
Next i
MsgBox SYA.DOOM2
MsgBox SYA.DOOM3

For i = 1 To 3
MsgBox YYA.DOOM1(i)
Next i
MsgBox YYA.DOOM2
MsgBox YYA.DOOM3

 

SYA.DOOM1(i)やYYA.DOOM1(i)に代入した値をFor i=1 to 3~Next iの繰り返しコードで配列の中身を表示させています。加えて.DOOM2や.DOOM3は中身をそのまま表示させています。

 

以上のように複数(今回は2個ですが)の変数で定義できるのは便利だと思います。

 

まとめ

 

 

今日は、Typeステートメントでユーザー定義型を作成して使用してみました。

変数の使用方法もまとめると綺麗なコードに見えます。

 

型枠が決まっていると、後は変数名を添えるだけなので便利です。

 

VBAは難しく考えず、短く綺麗に、コードウインドウにありがとうねって声をかけながら作ってみると、案外うまく出来るかも。