ExcelVBA ユーザー定義型で複数の関連データを一つにまとめて扱う方法

 

ExcelVBA 「ユーザー定義型」を使用することで、複数の関連データを一つの単位(構造体)としてまとめて扱えるようにします。これにより、コードの可読性とメンテナンス性が向上します。使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

2025年の目標は繰り返し作業に悩まされない年にしませんか? Excel VBAを活用した効率化がその第一歩
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事

 

Excel VBA ユーザー定義型 利用シーン

以下のようなシーンで利用で表示します。

1.顧客情報(名前、住所、電話番号など)のような関連データを1つの型でまとめる。

2.配列やコレクションで複雑なデータを管理する際に便利

3.複数のデータを1つの関数やプロシージャで簡単にやり取りする。

使い方

ユーザー定義型は、標準モジュールで定義し、プロシージャや関数で使用します。

1.定義する場所
ユーザー定義型は、標準モジュール内に定義します。

2.定義の構文

Type 型名
 メンバ1 As データ型
 メンバ2 As データ型
 ...
End Type

ポイント

1.標準モジュールに定義
ユーザー定義型は標準モジュール内で定義する必要があります。他のモジュールやフォームモジュール内には定義できません。

2.PublicまたはPrivateの指定
型のスコープを意識して、適切に Public や Private を使用します。

3.名前の競合に注意
型名が既存のVBAキーワードや他の変数名と競合しないようにします。

 

Excel VBA  ユーザー定義型のサンプルコード

Excel VBAで効率化の準備をしてみませんか?2025年をよりスムーズに過ごすための資格
基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事

標準モジュール(ユーザー定義型の定義)

Option Explicit

Public Type CustomerInfo
    Name As String
    Address As String
    PhoneNumber As String
End Type

Sub TestUserDefinedType()
    ' ユーザー定義型の変数を宣言
    Dim customer As CustomerInfo

    ' メンバに値を設定
    customer.Name = "山田 太郎"
    customer.Address = "東京都千代田区"
    customer.PhoneNumber = "012-3456-7890"

    ' 値を表示
    MsgBox "名前: " & customer.Name & vbCrLf & _
           "住所: " & customer.Address & vbCrLf & _
           "電話番号: " & customer.PhoneNumber
End Sub

標準モジュール(複数の顧客情報を管理する場合に配列で使用)

Option Explicit

Public Type CustomerInfo
    Name As String
    Address As String
    PhoneNumber As String
End Type

Sub TestArrayWithUserDefinedType()
    Dim customers(1 To 2) As CustomerInfo

    ' 1人目のデータを設定
    customers(1).Name = "山田 太郎"
    customers(1).Address = "東京都千代田区"
    customers(1).PhoneNumber = "012-3456-XXXX"

    ' 2人目のデータを設定
    customers(2).Name = "鈴木 花子"
    customers(2).Address = "大阪府大阪市"
    customers(2).PhoneNumber = "098-7654-YYYY"

    ' データを表示
    Dim i As Integer
    For i = LBound(customers) To UBound(customers)
        MsgBox "名前: " & customers(i).Name & vbCrLf & _
               "住所: " & customers(i).Address & vbCrLf & _
               "電話番号: " & customers(i).PhoneNumber
    Next i
End Sub

 ユーザー定義型は必ず標準モジュール内で定義する。PublicまたはPrivateを指定して、スコープを適切に管理。配列や複雑なデータ構造での使用はコードの効率を向上させます。

エラーが出たら、まず定義場所とスペルを確認してください。

これらのポイントを押さえれば、初心者でもユーザー定義型を安心して活用できます。

Excel VBAで自動化するコードのベースを習得したい方におすすめ!

VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。

 

Excel  VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。