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