VBAで配列
しばらくVBAから離れてたので、色々忘れていて困り果てたため自分メモを残す。
Excel VBAでの覚え書き。Excel2003だけど2010でもOK。
(1)配列をDimでなくConst(定数)として扱う。
Const ArrMybook() AS String = Array("我が輩は錨である”,"老人と滝”,"2010円宇宙の旅”,"嚔")
という風に扱いたいが、配列はConstとして使えない。あくまでDimるしかない。
仕方がないので一個一個入れていく。
Dim ArrMybook(4)
ArrMybook(1) = “我が輩は錨である”
ArrMybook(2) = “老人と滝”
ArrMybook(3) = “2010円宇宙の旅”
ArrMybook(4) = “嚔”
めんどくさそうに見えるけど、Excel VBA使う場合はExcelの方で、定数化したかった文字列をセルに並べて
= ” ArrMybook(” & ROW()-3 & “) = “"” & A1 & “"”
という感じで代入部分を一気に作ってコピーしてしまう。
(2)多次元配列の最大要素数を調べる。
UBound(ArrMybook)
これを多次元配列でやりたい。書架を表すArrMyBookShelf()配列の最大要素数を知りたい!
ArrMyBookShelf(X, Y, Z)のYの最大値を知りたいんだ!
UBound(ArrMyBookShelf,2)
ということでZが知りたい場合は
UBound(ArrMyBookShelf,3)
(3)Functionの戻り値が動的配列だった場合に配列の要素数を調べたい。でも配列に何も入ってない可能性もあるし入ってる可能性もある。
うわめんどくさい。しかもワタシ的にはよくあるパターン。
何も入ってなかったら0でそれ以外は最大要素数が欲しいなー。
そのまま何も考えずUBoundするとエラーが出る可能性もあるし出ない可能性もある。
なにやら面倒くさいが、何もない=エラーの場合は0になればいいんだ。だったらOn Error Resume Nextしてエラーの場合は次の処理に飛ばす。
On Error Resume Next ‘'’ 一時的にエラーを黙認
MaxArr = 0 ‘'’ とりあえず0を入れておく
MaxArr = Ubound(ArrMybook) ‘'’ MaxArr取得。取得できない場合は上の “0″ が生きてる。
On Error GoTo 0 ‘'’ エラー復帰。これ以降は各エラー処理を個別記載。
他にも色々あるけど、とりあえずこれぐらい。


2月9日