色々足りない Excel VBA のなかでも頻繁に歯ぎしりさせられる可変長配列。
データを読みながら、使うものだけ取り出していくような場合、こんな感じになる。
// コード例を載せたいときはこのようにスル
Dim customers() as Customer
・・・
for i = 0 to dataCount
・・・
if(sgn(customers) = 0) then
redim customers(0)
else
redim preserve customers(ubound(customers) + 1)
end if
set customers(ubound(customers)) = customer
next
どのタイミングで最初の1件が見つかるかわからないから、初期化チェックが必要。(ループの前で初期化しちゃう手もなくはないが「0番目は必ず空っぽ」というイマイチなデータができあがる)
こういう風にできないかと思ったんだけど
// コード例を載せたいときはこのようにスル
public function append(toArray as Variant, val as Variant) as Variant
if(sgn(toArray) = 0) then
redim toArray(0)
else
redim preserve toArray(ubound(toArray) + 1)
end if
set toArray(ubound(toArray)) = val
append = toArray
end function
呼び出し元の配列もVariantにしなきゃならない(型指定の配列にできない)。
・・・それでも中身の型は維持されるから、これがましなのかなあ。
コメント
コメントを投稿