コンセプト
本記事は,VBAマクロを書いたことがある人,もしくはこれから効率よく学びたい人向けのコンテンツです。
私は研究室時代にマクロをごりごり書いていたのですが,動けばいいという発想の元汚いコードを長々と書いてきました。
その反省もこめて,配列にユーザ定義型の変数を動的に配列拡張 (ReDim) して格納していくコードのサンプルを共有します。
本コードは雛形として使えるので,主にユーザ変数などを必要な変数に置き換え活用してください。
本コードが役に立つ人
- 複数の値をシートからコピーしては変数に格納しては,コピー&ペーストしている。
- Item(100) as String のように固定長配列に頼りきりの人。
- 可変長配列をスマートに関数を使って導入したい人。
ソースコード
Type USER
age As Integer
name As String
End Type
Type Box
Item() As USER
count As Integer
End Type
Sub macro()
Dim DB As Box
Dim ユーザ1 As USER
With ユーザ1
.age = 10
.name = "たろう"
End With
Add DB, ユーザ1
Clr DB
End Sub
Private Sub Add(Box As Box, Item As USER)
With Box
.count = .count + 1
ReDim .Item(.count)
.Item(.count) = Item
End With
End Sub
Private Sub Clr(Box As Box)
With Box
Erase .Item
count = 0
End With
End Sub
説明
本ソースコードの肝の部分
- Type Box でBox型の変数を宣言。Box型には,要素を格納する配列 Item() と要素数を操作するためのcountを定義
- BoxのItem()の配列要素数を増やしながら (ReDim) ,変数を格納するAdd関数を実装
- BoxのItem()とcountを初期化するClr関数を実装
あとは,各々がBoxに格納するためのユーザ定義変数を別途定義してAdd関数やClr関数を使用