忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBA】ユーザー定義型(Type句)の使い方!Object(クラス)との決定的な違いと使い分けの極意

VBAでバラバラな変数を一つにまとめたいとき、真っ先に候補に上がるのが「ユーザー定義型(Type句)」です。しかし、中級者以上になると「クラスモジュール(Object)」との使い分けに悩むことも。今回は、基本の書き方から、実務で役立つObjectとの使い分け判断基準まで徹底解説します。

1. 基本文法:Typeステートメントで「型」を作る

ユーザー定義型は、標準モジュールの先頭(宣言セクション)で Type を宣言します。これにより、複数の異なるデータ型を「一つの変数」として扱えるようになります。

[ 構文 ]
Type UserType
    Id As Integer
    Name As String
End Type

2. 実践サンプル:データの代入と出力

ポイント:Dimで宣言するだけで「実体」ができる

ユーザー定義型は、Objectと違い Set や New を使う必要がありません。宣言した瞬間からメモリ上に領域が確保されるため、非常に軽量で高速です。

Sub Macro1()
  Dim User As UserType  ' Newは不要!
  
  User.Id = 1
  User.Name = "いけいけ理系NEO"
  
  Debug.Print User.Id
  Debug.Print User.Name
End Sub

3. 徹底比較:ユーザー定義型 vs Object(クラス)

どちらを使うべきか迷ったときは、以下の「エンジニアの判断基準」を参考にしてください。

比較項目ユーザー定義型 (Type)Object (Class)
生成コスト 極めて軽量・高速 Newが必要でやや重い
メソッド 持てない(データのみ) 持てる(処理も内包)
配列・連想配列 Collectionに入れられない Collection等に格納可能

4. まとめ:結局どっちを使えばいいの?

1. Typeを使うべき時: 「単純に値をセットで持ちたいだけ」の場合です。例えば座標(X, Y)や、一時的な構造データの保持など、メモリ消費を抑えて「いけいけ」なスピードで回したいループ処理に向いています。
2. Object(クラス)を使うべき時: 「そのデータに関連する独自の処理(メソッド)」を持たせたい時や、データを Collection や Dictionary に詰め込んで管理したい時です。Javaなどのオブジェクト指向的な設計が必要な大規模開発ではクラス一択です。
3. エンジニアの視点: ユーザー定義型は「構造体」、Objectは「インスタンス」と考えるとスッキリします。VBAでも「データ」と「振る舞い」を分離することで、コードの保守性は見違えるほど良くなります。


5. 最後に

初心者はまず、手軽な「ユーザー定義型」から始めてみましょう。変数が整理される快感を覚えたら、次は「クラスモジュール(Object)」に挑戦して、より高度な設計を目指してみてください。使い分けができるようになれば、あなたのVBAスキルはプロの領域です。





PR