ユーザー定義型変数(複数のデータ型を1つにまとめます)

 マクロの冒頭で変数のデータ型を宣言することは、VBA の基本中の基本ですね。整数のデータを扱うときは Integer や Long, 文字列を扱うときは String を宣言しておきます。この記事を読んでくださっている人にとっては、そんなことは百も承知かと思いますが、宣言した以上は、その変数に格納できるデータの型は一種類だけです。Integer型変数には整数だけ、String型変数には文字列だけしか入れることができません。しかし、これらの異なるデータ型を組合わせた変数を自分で勝手に定義することもできます。それが ユーザー定義型変数 とよばれるものです。

 ユーザー定義型変数の概念を本 (book) を例にとってイメージしてみます。ただ単に「本 (book)」といえば、世界中に存在するあらゆる形態の書物を含む一般名詞です。しかし、それぞれの本には表題 (title)、著者 (author)、価格 (price) といった特有の属性をもっています。それを図で表すと下のようなイメージになります。

  VBAユーザー定義型変数(構造体)概念図
 

ユーザー定義型変数を作成します

 ユーザー定義型変数は宣言セクション(モジュールの一番上)で Typeステートメント によって作成します。3つの属性を用いて本を表すデータ型を作成してみると次のようになります。

 '本のデータ型を定義します
 Type Book
  title As String
  author As String
  price As Long
 End Type

 ここに表題 (title) と著者 (author) については文字列型、価格については整数型で定義されていることに注目してください。ユーザー定義型変数は複数の異なるデータ型を混在させることができるのです。
 

ユーザー定義型変数を宣言します

 ユーザー定義型変数を使用するには、普通のデータ型と同じくマクロの冒頭で Dim によって宣言します。その昔にこばとが書いた本のデータを作成してみます。

 '本のデータを作成します
 Sub BookData1()

  Dim x As Book

  '表題を格納します
  x.title = "踊りながら覚える英文法"

  '著者をを格納します
  x.author = "言葉の妖精こばと"

  '価格を格納します
  x.price = 3500

  Debug.Print x.title, x.author, x.price&; "円"

 End Sub

 x を3つの属性をまとめて格納する変数として定義しています。そして表題を格納するには変数の後ろにドットを付けて

x.title = "踊りながら覚える英文法"

のように記述します。著者と価格はそれぞれ x.author, x.price に格納します。上のマクロでは確認のために、Debug.Print で3つのデータを表示させるようにしてあるので試してみてください。
 

書籍のデータを Book型の配列に格納します

 書籍の一覧を Book 型で定義された配列に格納するマクロを作ってみます。『あとりえこばと』で出版されたエクセルデータをサンプルとして使います(実際に会社で用いているものには発行日や書籍コードなど他の項目もありますけど、ここでは簡略化してあります)。

表題 著者 価格
踊りながら覚える英文法 こばと 3500
こばとの愉快なアラビアン こばと 4800
ビジネスで使ってはいけない英語 刑部真理子 1300
やまとことば不思議発見 Aisling McKenzie 1600
言葉の散歩道 城戸涼音 2200

 上の表をコピーしてワークシートに貼り付けてくださいな。

 こばとの愉快なアラビアン(書籍データ)

 マクロは次のようになります。

 Sub BookData2()

 'mydata 配列として宣言します
 Dim mydata() As Book
 Dim i As Long
 Dim rct As Long, lct As Long

 Selection.CurrentRegion.Select

 'リストの行数と列数を得ます
 rct = Selection.Rows.Count
 lct = Selection.Columns.Count

 '配列の要素数を決めます
 ReDim mydata(rct)

 '本のデータを格納します
 For i = 2 To rct
  mydata(i).title = Selection.Cells(i, 1)
  mydata(i).author = Selection.Cells(i, 2)
  mydata(i).price = Selection.Cells(i, 3)
 Next i

 '配列を並べてみます
 For i = 2 To rct
  Debug.Print mydata(i).title, mydata(i).author, mydata(i).price
 Next i

 End Sub

 表のどこかを選択した状態で上のマクロを実行すると、イミディエイトウィンドウに一覧が表示されるはずです。え? いい加減な本を売るな? 踊りながら英文法が覚えられるわけがない? う、うそじゃないもん。そういうクレームは本を買ってから言ってくださいな~。『あとりえこばと』の本をよろしくね~。

 ≫ VBA 辞典メニューに戻って他の記事も読んでね~♪

Google広告
スポンサーリンク
スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください