VBA リストボックス データを追加する



リストボックスにデータを登録する


エクセルVBAのユーザーフォームのリストボックスに任意のデータを追加する方法です。

関数、メソッドなど
ListBoxコントロールのAddItemメソッドか、RowSourceプロパティかListプロパティを使用します。



1.AddItemメソッド
AddItemはListBox.AddItem 追加する値で記述します。
コード
Private Sub UserForm_Initialize()
    
    ListBox1.AddItem "A"
    ListBox1.AddItem "B"

End Sub



こんな感じで登録されます。


ワークシート上のセルを追加する場合は
Private Sub UserForm_Initialize()
Dim i As Long

    With ListBox1
         For i = 2 To 10
            .AddItem ActiveSheet.Cells(i, 1)
        Next i
    
    End With

End Sub


一列目(=A列)の1~10行目の値がリストに追加されました。

2列以上にする場合は、ColumnCountプロパティを指定し、AddItemした後にListプロパティで編集します。

コード
Private Sub UserForm_Initialize()
Dim i As Long

    With ListBox1
         .ColumnCount = 3
         For i = 2 To 10
             .AddItem ""
             .List(.ListCount - 1, 0) = ActiveSheet.Cells(i, 1)
             .List(.ListCount - 1, 1) = ActiveSheet.Cells(i, 2)
             .List(.ListCount - 1, 2) = ActiveSheet.Cells(i, 3)
        Next i
    
    End With

End Sub



Listプロパティは(行,列)形式で0から始まっています。
(1行目の1列目はList(0,0)、1行目2列目はList(0,1)・・・)


2.RowSourceプロパティ
コード
Private Sub UserForm_Initialize()
Dim r As Long

r = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    With ListBox1
         .ColumnCount = 3
        .RowSource = "Sheet1!A2:C" & r
    
    End With

End Sub


r>
関連・類似ページ
ListViewコントロールの方が見せ方やイベント、などの勝手がよくて使いやすいのですが、64bit版のofficeだとサポートされていません。
なので、もし64bitのofficeになってしまってリストビュー的なことがやりたい場合はListBoxで戦うしかなさそうです。
Officeは特別な理由が無い限り32bitがいいと思います・・・。(64bitの方が速度などパフォーマンスが向上するという噂もありますが。)

ListViewコントロール