ぼくLog

子持ち、車持ち、マンション持ちの僕の日常を綴ります。車と、ラクをしたい一心で覚えたエクセルVBAを中心になりそうです。

とりあえず配列志向で|エクセルVBA

配列はスタメンです

エクセルのVBAのスタメンを決めていくなら、配列は間違いなくスタメンです。

三次元以上の配列を使うことは稀で、そのほとんどは一次元、あるいは二次元配列がメインになってくると思います。 行と列の二次元で出来たワークシート相性の良さもあって、二次元配列はかなり重宝しますよね。


配列の要素数を決め打ちで宣言することは稀です

VBAの指南書とかを見ると、下のように最初から要素数も含くめて配列を宣言しているものをよく見ます。

Sub サンプル1()
  
  Dim strSample(3)      As String

  strSample(0) = "a"
  strSample(1) = "b"
  strSample(2) = "c"

End Sub

ただ、予め要素数を決め打ちで使うことは稀ではないでしょうか。

実際は、とりあえず配列を用意

  Dim strSample()        As String


この配列は、次元、要素数を未定として宣言する、動的配列と呼ばれます。

この動的配列を用意したのち、納めるデータのサイズに応じて次元、要素数を変更。

例えば、

Sub サンプル2()
  Dim strSample()        As String
  Dim cntRow              As Long
  Dim cntCol                As Long

  With wsMain

    With .Cells(1, 1).CurrentRegion

      cntRow = .Rows.Count
      cntCol = .Columns.Count

      Redim strSample(cntRow, cntCol)

    End With  

  End With

といったように、可変なセル範囲を元に配列のサイズを決めて、それからデータを入れていく、というのが一般的ではないでしょうか。

この例は、横(列)方向ん項目が並んで、縦(行)方向にレコードが続いていく表を改めてイメージすると分かりやすいと思いますが、表の大きさは往々にして変わっていきますので、最初から配列のサイズを固定にして宣言してしまうと、表のサイズが変わる都度、その宣言部を変更していく必要が出てきます。

であれば、配列は動的配列として用意して、後から表のサイズに合わせて要素数を変更するようにすれば、余計な手間を掛けずに済むことになります。

たとえ、どの次元の要素数も決して変わることがないとして、要素数は”あとから決める”ということを決め事にしてもいいと思います。