Hidari's Blog

気まぐれ更新~ ITエンジニアの雑記ブログ

【VBAマクロ】使いまわせる便利な動的配列操作の関数サンプルコード!オブジェクト指向

f:id:hidarimigita:20200202172028p:plain

コンセプト

本記事は,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
'main()---------------------------------------------
Sub macro()
 Dim DB As Box
   Dim ユーザ1 As USER
 With ユーザ1
     .age = 10
     .name = "たろう"
 End With
'配列を使った操作サンプル----------------------------------------
 Add DB, ユーザ1 
 Clr DB 
End Sub
'Boxに要素を動的に追加する関数---------------------------------------------
Private Sub Add(Box As Box, Item As USER)
    With Box
        .count = .count + 1
        ReDim .Item(.count)
        .Item(.count) = Item
    End With
End Sub
'Boxの初期化を行う関数---------------------------------------------
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関数を使用