#要点
・VBAの動的配列は最終要素のみ可変だから、2次元であれば "横長" の表になる。.List
プロパティに横長配列をセットしようとすれば、行⇔列変換のプロセスを経る必要があり、そこで一時的にメモリが食われる。サイズの大きな配列だと、メモリ不足エラーが返る。
・横長配列をそのままUserform.ListBox.Column=array
とセットすれば、メモリの心配なく "縦長" で表示してくれる。
##補足
・ADODB.RecordSetの.GetRows
で返される配列も "横長"。ここでも.Column
プロパティが便利。
・配列を.Column
プロパティでセットしても、.List
プロパティは引き続き機能する。例えば配列要素をListBox.List(ListBox.ListIndex)
で取ることができる(そもそも.ColumnIndex
プロパティは無い)。
・ListBox1.List=array
でセットした配列をarray=ListBox1.Column
で再代入すると、転置されている(逆も同様)。Excel関数を使ったApplication.WorksheetFunction.Transpose
の転置にはクセがあって、"縦長1列" の2次元配列を転置すると "横長1行" の1次元配列となって自動的に次元が下がってしまうが、ListBox
の.List
と.Column
間では2次元のまま。