リストボックスにデータを登録する
エクセル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コントロール