LoginSignup
0
0

More than 1 year has passed since last update.

Userform.ListBox.Columnでメモリ不足エラーを回避できるケース

Last updated at Posted at 2020-07-07

#要点
・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次元のまま。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0