ユーザーフォームに
リストボックスと
コマンドボタンを配置し、シートに入力されたデータをリストボックスに追加、ボタンをクリックすると複数列の複数選択されたリスト項目を取得します。
リストボックスで複数選択できるようにするには、プロパティで「MultiSelect」を「1-frmMultiSelectMulti」か「2-frmMultiSelectExtended」にします。
リストボックスで複数列にするには、プロパティの「ColumnCount」に列数を入力します。
ユーザーフォームの作成画面
新規ユーザーフォームに下記のコントロールを配置します。
- ListBox1 : MultiSelectプロパティを「1-frmMultiSelectMulti」に設定、ColumnCountを「4」に設定
- CommandButton1 : Captionプロパティに「選択項目の取得」を入力
フォーム上を右クリックし、「コードの表示」をクリックします。
プロシージャを「Initialize」に変更し、コードを入力します。
次に、CommnadButton1_Clickイベントに、コードを入力します。
完成したユーザーフォームです。
シートに入力されたデータから、リストボックスのリストが作成されています。
リストボックスの列幅は無調整です、実際に使うには調整し見やすくします。
リストボックスで複数行を選択し(青色に反転している行が選択行です)、「選択項目の取得」ボタンをクリックします。
すると選択されている項目データがMsgboxで表示されます。
実行VBAコード
Private Sub CommandButton1_Click()
Dim i As Integer
Dim s As String
s = ""
'リストボックスのリスト数をループ
For i = 0 To ListBox1.ListCount - 1
'選択行ならば
If ListBox1.Selected(i) = True Then
'リスト項目の取得
s = s & ListBox1.List(i, 0) & " "
s = s & ListBox1.List(i, 1) & " "
s = s & ListBox1.List(i, 2) & " "
s = s & ListBox1.List(i, 3) & vbCrLf
End If
Next i
'選択行の内容を表示
MsgBox "選択されたリスト" & vbCrLf & s
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
Dim StartRow As Long
Dim EndRow As Long
'開始行
StartRow = 4
'最終行の取得
EndRow = Worksheets("Sheet1").Range("B65536").End(xlUp).Row
'開始行から最終行までループ
For i = StartRow To EndRow
'リストボックスに追加
ListBox1.AddItem i - StartRow
'リストボックスに各列を追加
ListBox1.Column(0, i - StartRow) = Worksheets("Sheet1").Cells(i, 2).Value
ListBox1.Column(1, i - StartRow) = Worksheets("Sheet1").Cells(i, 3).Value
ListBox1.Column(2, i - StartRow) = Worksheets("Sheet1").Cells(i, 4).Value
ListBox1.Column(3, i - StartRow) = Worksheets("Sheet1").Cells(i, 5).Value
Next i
End Sub