2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« VBScriptやVBAの配列に不定数の要素を追加するには?(その2) | トップページ | VBAの配列に不定数の要素を追加するには?(その4) »

2008年5月20日 (火)

VBAの配列に不定数の要素を追加するには?(その3)

Variant型の空の配列は、
  Dim a As Variant
  a = Array()
で作れますが、Variant型以外のデータ型の場合は?

String型は、
  Dim a() As String
  a = Split("")
Byte型は、
  Dim a() As Byte
  a = ""
で作れますが、Long型などは、空の配列が作れません。

もし、空の配列の代わりに、未初期化の配列を使うと、UBound(a)がエラーになります。

そこで、空の配列の代わりに、未初期化の配列を使うやり方。

Dim a() As String
Dim n As Long
Dim f As String
f = Dir("*")
Do While Len(f)
  n = -1
  On Error Resume Next
  n = UBound(a)
  On Error GoTo 0
  ReDim Preserve a(n + 1)
  a(UBound(a)) = f
  f = Dir()
Loop
MsgBox Join(a, vbLf)

さすがに手順がちょっと多いので、別にPush関数を作ってやるほうがよいでしょう。

Dim a() As String
Dim f As String
f = Dir("*")
Do While Len(f)
  Push a, f
  f = Dir()
Loop
MsgBox Join(a, vbLf)

Sub Push(Items, Item)
Dim n As Long
n = -1
On Error Resume Next
n = UBound(Items)
On Error GoTo 0
ReDim Preserve Items(n + 1)
Items(UBound(Items)) = Item
End Sub

ただし、未初期化のままだと、後で使うときにエラーになるので、要素が必ず存在するような場合に使うとよいでしょう。

なので、要素がないこともあるときは、空の配列が作れるデータ型なら、それで。
空の配列が作れないデータ型なら、できればVaiant型にしたほうがよいでしょう。

« VBScriptやVBAの配列に不定数の要素を追加するには?(その2) | トップページ | VBAの配列に不定数の要素を追加するには?(その4) »