第110回.ユーザー定義型・構造体(Type)
ユーザー定義型は、名前の通りユーザーが定義できるデータ型になります。
普通の変数は、1つの値しか入れられませんが、
ユーザー定義型は、複数の異なるデータ型を入れる事が出来ます。
プログラミング言語での一般的な呼び方としては、構造体とも呼ばれます。
(プログラミング言語によっては、オブジェクトそのものです)
オブジェクトが、複数のデータ型の違うプロパティを持っていることと同様に考えてよいものです。
Typeステートメントの構文
ユーザー定義型には 1 つまたは複数のデータ型の要素、配列、または事前に定義したユーザー定義型を格納することができます。
elementname [([subscripts])] As type
[elementname [([subscripts])] As type]
・・・
End Type
Public | 省略可能です。 すべてのプロジェクトのすべてのモジュールのどのプロシージャからも参照できるユーザー定義型を宣言するときに指定します。 |
Private | 省略可能です。 宣言が行われたモジュール内でのみ参照できるユーザー定義型を宣言するときに指定します。 |
varname | 必ず指定します。 宣言するユーザー定義型の名前です。 変数の標準的な名前付け規則に従って指定します。 |
elementname | 必ず指定します。 ユーザー定義型を構成する要素の名前です。 要素名は、変数の標準的な名前付け規則に従って指定します。 ただし、キーワードを使うこともできます。 |
subscripts | 省略可能です。 配列の要素の次元を指定します。 動的配列を宣言する場合は、かっこだけを指定します。 引数 subscripts の構文は次のとおりです。 [lower To] upper [,[lower To] upper] . . . 引数 lower を省略すると、配列の添字の最小値は Option Base ステートメントによって制御されます。 Option Base ステートメントが記述されていない場合は、添字の最小値は 0 になります。 |
type | 必ず指定します。 要素のデータ型を指定します。バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長の場合は String、固定長の場合は String * length)、オブジェクト型 (Object)、バリアント型 (Variant)、ほかのユーザー定義型、オブジェクトの種類のいずれかを指定できます。 |
Type ステートメントは、モジュール レベルでのみ使用できます。
ユーザー定義型は、その型の変数を宣言して使用します。
つまり、Type ステートメントは型(LongやString等と同様)を定義しているだけです。
ユーザー定義型は、複数のフィールド(項目)を持つレコードのような使い方が出来ます。
ユーザー定義型の変数全体を、直接バリアント型 (Variant) に代入できません。
ユーザー定義型の使い方
Dim
Private
Public
これらで変数宣言します。
変数宣言のデータ型として、
モジュールレベルで宣言してある、ユーザー定義型の名前を指定します。
Type type社員
・・・
End Type
Sub sample()
Dim 社員 As type社員
・・・
End Sub
ユーザー定義型の使用例
氏名
所属
住所
電話
これをユーザー定義型として定義します。
Type type社員
番号 As Long
氏名 As String
所属 As String
住所 As String
電話 As String
End Type
Sub sample()
Dim 社員 As type社員
社員.番号 = 1101
社員.氏名 = "名前"
・・・
End Sub
ユーザー定義型の変数は、インテリセンスが有効となります。
メンバーが自動表示されるので、VBA記述がとても楽になります。
ユーザー定義型を配列として定義し、大量データを扱うような場面には非常に強力な機能となります。
ユーザー定義型の制限
・Variant変数に入れることはできません。
・Collectionに入れることはできません。
・Dictionaryに入れることはできません。
ユーザー定義型の制限とクラスとの使い分け
最後に
しかし、これを使いこなすことで得られるメリットは大きいです。
効率的に作成できるようになることは、VBA習得の一つの目標といえるでしよう。
サイト内の活用事例
先々クラスを使うようになった時にもユーザー定義型の知識がとても役に立ちます。
VBAクラスの作り方:列名の入力支援と列移動対応
同じテーマ「マクロVBA入門」の記事
第111回.静的配列
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。