サイトについて      連絡先   検索

VBA 構造体

はじめに

Excel VBA マクロで構造体 Type の使い方を紹介します。

構造体とは、複数の変数をグループ化したようなものです。関連性のある値をまとめます。

ユーザー定義型とも言います。関数やコンストラクタは作成できません。配列にできます。

  • 目次
    • 構造体を宣言する
    • 構造体のスコープ
    • 構造体の使い方
    • 構造体を配列にする

構造体を宣言する

Type 構造体名のように入力します。Type が構造体を宣言するキーワードです。

Type の中に要素名 As 型名のように入力します。要素は変数のように使えます。


Type Point
    X As Integer
    Y As Integer
End Type

Type Customer
    Birthday As Date
    Id As Integer
    Name As String
End Type

構造体の中に関数やコンストラクトなどは作成できません。変数だけ定義できます。

構造体のスコープ

構造体 のスコープも基本は他と同じです。Dim は使用できません。他の関数より上に宣言します。


Public Type パブリック ' Public は標準モジュールにのみ宣言できる
    要素名 As String
End Type

Private Type プライベート
    要素名 As String
End Type

Type 省略 ' 省略したときは Public になる
    要素名 As String
End Type

Public で宣言できるのは標準モジュールのみです。Sheet1 などのクラスに宣言するには Private にする必要があります。

構造体の使い方

構造体名がデータ型になります。その変数を宣言して構造体を操作します。

構造体の変数.要素名のように入力して、構造体の要素に値を取得または設定できます。


Dim p As Point ' Point 構造体を変数で宣言する

' 値を設定する
p.X = 10
p.Y = 20

' 値を取得する
Dim i As Integer
i = p.X
Debug.Print (i) ' 10
i = p.Y
Debug.Print (i) ' 20
上記で宣言した Point 構造体を使用しています。

構造体を代入する

同じ構造体ならそのまま変数に代入できます。すべての要素がそれぞれ代入されます。簡単に言うとコピーできます。


Dim p1 As Point
p1.X = 10
p1.Y = 20

Dim p2 As Point
p2 = p1 ' p1 を p2 にコピーする
Debug.Print (p2.X) ' 10
Debug.Print (p2.Y) ' 20

初期化

構造体を初期化するには、空の変数を代入します。


Dim p1 As Point
p1.X = 10
p1.Y = 20

Dim p2 As Point 
p1 = p2 ' p1 に p2 をコピーする
Debug.Print (p1.X) ' 0
Debug.Print (p1.Y) ' 0

構造体を配列にする

構造体の要素も変数と同じように配列にできます。


Private Type 構造体
    静的(2) As Integer ' 静的配列
    動的()  As Integer ' 動的配列
End Type

Sub 実行()
    Dim p As 構造体
    p.静的(0) = 10

    ReDim Preserve p.動的(3)
    p.動的(0) = 20
End Sub

構造体そのものを配列にするには、それを宣言した変数を配列にします。


Dim 静的(2) As Point ' 静的配列
静的(0).X = 10

Dim 動的() As Point ' 静的配列
ReDim Preserve 動的(3)
動的(0).X = 10

データベースのデータを取得するときなど、多くのデータを操作するときに構造体が役に立ちます。構造体をレコードとして、要素を列として考え、構造体を配列にするとテーブルのデータを取得できます。

  • 目次
    • 構造体を宣言する
    • 構造体のスコープ
    • 構造体の使い方
    • 構造体を配列にする