AddItemメソッドによるデータの登録は高速です。数千件程度のデータ数なら、For Nextでぶん回したって、たいした時間はかかりません。でも、さすがに数万件になると、それなりに時間がかかります。別に時間がかかったっていいんですけど、プロの仕事としては、そのへんを高速化できるのもスキルのうちなので、たまには気にします。
大量のデータをリストボックスに登録するときは、Listプロパティに配列を直接ぶち込みます。もともと、ListBoxに登録されているデータは、配列形式で管理されています。その配列はListプロパティで操作できますので、ここに直接配列を入れてやれば、大量のデータも一瞬で登録できてしまいます。
ここでは、下図のようなA列をリストボックスに登録します。データは5万件(セル範囲A2:A50001)です。
For NextでAddItemすると、さすがに時間がかかりますので、次のようにします。
Private Sub CommandButton1_Click() ListBox1.List = Range("A2:A50001").Value MsgBox "登録件数:" & ListBox1.ListCount End Sub
ほんとに、目を疑うほど一瞬で終わります。逆に、ちゃんと登録されているのか心配になります。そこで、上のコードでは、念のために登録件数も確認しました。
この方式で大量のセルをリストボックスに登録するときは、Valueプロパティを省略してはいけません。「Range("A2:A50001")」だけでは、配列データにならないからです。
5万件程度ではコーヒーを飲む間もありませんので、いっそ100万件でやってみましょう。さすがに、それなりの時間がかかるでしょう。
Private Declare Function GetTickCount Lib "Kernel32" () As Long Private Sub CommandButton1_Click() Dim S As Long S = GetTickCount ListBox1.List = Range("A2:A1000001").Value MsgBox "登録件数:" & ListBox1.ListCount & vbCrLf & _ (GetTickCount - S) / 1000 & "秒" End Sub
ふぅ・・・
あ、もちろん、所要時間はパソコンのスペックによって違います。