【VBA入門】構造体の使い方(宣言、初期化、引数、コピー、定数)

構造体って使っていますか?構造体とは、配列と同じようにデータをひとかたまりで扱うことができて便利です。

配列は同じ型のデータをひとかたまりで扱うことができますが、構造体は型の違うデータもひとかたまりで扱うことができます。構造体というとC言語がよく知られていますが、VBAでも構造体を扱うことができます。

この記事では、構造体について

  • 構造体とは
  • 構造体の使い方
  • といった基本的な内容から

  • 構造体を引数に指定する方法
  • 配列の要素に構造体を指定する
  • 構造体をコピーする方法
  • 構造体のメンバで定数を定義する方法
  • など応用的な内容についても解説していきます。

    今回は構造体について、使い方をわかりやすく解説します!

    構造体とは

    構造体とは、複数以上のデータをまとめて1つのかたまりにしたものです。まとめられたデータはフィールド(メンバ変数)と呼ばれ、型の違う変数をフィールドとすることができます。

    構造体はオブジェクトを生成して使用します。オブジェクトからフィールドを呼び出し、値を代入して使用します。

    なお、同じように複数のデータをまとめて1つのかたまりにしたものに配列があります。配列の場合は同じ型のデータしか1つのかたまりにできません。構造体は型の違うデータも1つのかたまりにできます。

    構造体の使い方

    構造体の使い方について宣言の方法、初期化の方法を順に説明していきます。

    構造体の宣言

    構造体を宣言する方法について説明します。

    構造体はTypeステートメントを使ってユーザー定義型を宣言します。下記のように記述します。

    構造体名というデータ型として定義されます。

    例えば以下のような記述になります。

    この例ではpersonalInfo型の構造体(ユーザー定義型)を宣言しています。

    構造体の初期化

    それでは構造体のオブジェクトを定義し、初期化する方法について説明します。

    以下のようにオブジェクトを生成します。

    オブジェクトを定義したら、次のように記述してフィールドにアクセスします。

    それではサンプルコードで確認しましょう。

    実行結果:
    Type01

    ※「パブリック ユーザー定義型は定義できません」といったエラーが出る場合、Typeの宣言を標準モジュールで行うようにしましょう。

    このサンプルコードでは、Typeステートメントを使ってpersonalInfo型の構造体を宣言しています。そして、Dimステートメントを使ってオブジェクトtanakaを作成しています。

    オブジェクトtanakaからそれぞれのフィールドを呼び出して値を代入して、初期化しています。なお、Typeステートメントを使った構造体型の宣言はオブジェクトを作成するSubプロシージャの外に記述します。

    構造体を引数に指定する

    構造体をFunctionプロシージャの引数に指定すると引数の数を削減できて便利です。

    構造体のオブジェクトをFunctionプロシージャの引数で渡すには、ByRefステートメントを使って参照型で渡す必要があります。サンプルコードで確認しましょう。

    実行結果:
    Type01

    このサンプルコードでは、Functionプロシージャを使ってMsgBoxを表示するmsg関数を定義しています。

    引数に構造体(ユーザー定義型)personalInfoを指定していますが、ByRefステートメントを使って参照型で渡すようにしています。構造体を引数に指定することで、変数を4つを引数に指定するよりも簡潔に関数を宣言することができています。

    なお、Functionプロシージャの使い方や引数の参照渡しについては、こちらで詳しく解説しています。ぜひ参考にしてください。

    【VBA入門】Functionの使い方(呼び出し、引数、戻り値)
    更新日 : 2019年5月27日

    配列の要素に構造体を指定する

    構造体を配列の要素に指定することが可能です。

    配列の要素に構造体を指定することで、さらにデータをひとかたまりで扱うことができて便利になります。サンプルコードで確認しましょう。

    実行結果:
    Type01
    Type02
    Type03

    配列の使い方については、こちらでまとめています。

    ぜひ参考にしてください。

    【VBA入門】配列総まとめ(初期化、ループ操作、コピー、結合、比較)
    更新日 : 2019年4月18日

    構造体をコピーする方法

    構造体のオブジェクトをコピーするには、別のオブジェクトに「=」記号を使って格納することでコピーすることができます。

    サンプルコードで確認しましょう。

    実行結果:
    Type01

    構造体のフィールドで定数を定義する

    構造体のフィールドでConstステートメントを使って定数を定義しようとするとエラーが発生します。

    フィールドに定数を定義する代替手段として、定数列挙型で初期化する方法についてご紹介します。列挙型はEnumステートメントを使って宣言します。列挙型の変数には定数を指定することができます。

    ただし、列挙型の変数には長整数型の値しか指定できません。構造体のフィールドで長整数型の値を指定する場合は、次のように記述します。

    実行結果:
    Type01

    このサンプルコードでは、Enumステートメントを使って列挙型myEnumを宣言し、変数ageを定数で定義しています。

    personalInfo型のオブジェクトtanakaのフィールドageを呼び出し、myEnumの定数ageを格納しています。

    まとめ

    ここでは、構造体の使い方について説明しました。構造体を使うと複数のデータをひとまとまりに扱うことができて便利です。

    使いこなすことができるように、この記事を何度も参考にして下さいね!

    Excel VBAを最短で習得したい方へ

    元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

    ただし、実際の学習期間中はつまづいている時間がほとんどです。

    「なかなかやり遂げられ無い、挫折してしまった」
    「時間が足りない」
    「情報が少なくどう調べればいいかわからない」
    「エラーを解決することができない」

    このような悩みを抱えている方も少なく無いと思います。

    • もう挫折したくない
    • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
    • 自分だけのカリキュラムで効率的に勉強したい
    そんな方はお気軽に侍エンジニア塾までご相談ください。

    お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

    まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

    Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

    詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

    cta2_vba2

    LINEで送る
    Pocket

    書いた人

    長野 透

    長野 透

    熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
    お問合せはこちらでも受け付けています。
    [email protected]

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説