web-dev-qa-db-ja.com

複数列リストボックスで選択された値を取得する方法

ユーザーフォームに複数列のリストボックスがあり、リストボックスの選択された行にある要素のすべての値を取得したいと思います。

これが私のユーザーフォームです: UserForm with ListBox


写真のように、1行を選択し、Associerボタンをクリックすると、この行の情報を取得できます。最初の列であるCAN20168301436を取得できます。行全体から情報を取得します。
どうすればできますか?
これが私のボタンクリックイベントです。

Private Sub CommandButton3_Click()
   a = ListBoxResultatFind.Text
End Sub
4
Yiao SUN

このコードを使用できます

Private Sub CommandButton3_Click()
    Dim strng As String
    Dim lCol As Long, lRow As Long

    With Me.ListBox1 '<--| refer to your listbox: change "ListBox1" with your actual listbox name
        For lRow = 0 To .ListCount - 1 '<--| loop through listbox rows
            If .selected(lRow) Then '<--| if current row selected
                For lCol = 0 To .ColumnCount - 1 '<--| loop through listbox columns
                    strng = strng & .List(lRow, lCol) & " | " '<--| build your output string
                Next lCol
                MsgBox "you selected" & vbCrLf & Left(strng, (Len(strng) - 1)) '<--| show output string (after removing its last character ("|"))
                Exit For '<-_| exit loop
            End If
        Next lRow
    End With
End Sub
10
user3598756

リスト全体をループする必要はありません。選択したアイテム行を取得するには、ListIndexプロパティを使用できます。次に、List(Row, Column)プロパティを使用して、@ DragonSamuおよび@ user3598756の例のように、データを取得できます。

'***** Verify that a row is selected first
If ListBoxResultatFind.ListIndex > -1 And ListBoxResultatFind.Selected(ListBoxResultatFind.ListIndex) Then
    '***** Use the data - in my example only columns 2 & 3 are used
    MsgBox ListBoxResultatFind.List(ListBoxResultatFind.ListIndex, 1) & ":" & ListBoxResultatFind.List(ListBoxResultatFind.ListIndex, 2)
End If
8
Olle Sjögren

単一の列を使用すると、次のように値を取得できます。

Dim str as String
str = me.ListBox1.Value

マルチカラムを使用すると、次のように値を取得できます。

Dim strCol1 as String
Dim strCol2 as String
Dim strCol3 as String
strCol1 = ListBox1.List(0, 1)
strCol2 = ListBox1.List(0, 2)
strCol3 = ListBox1.List(0, 3)

または、すべてのデータを1つの文字列に追加できます。

Dim strColumns as String
strColumns = ListBox1.List(0, 1) + " " + ListBox1.List(0, 2) + " " + ListBox1.List(0, 3)
2
DragonSamu

これは6列のリストボックスで、3列目は乗数になるため、「(x)」になります。リストを好きなように並べ替えることもできます。

Private Function selList() As String
Dim i As Long

For i =LBound(lstListBox1.List) To UBound(lstListBox1.List)
    If lstListBox1.Selected(i) Then
        selList = selList & lstListBox1.List(i) & " " & lstListBox1.List(i, 1) _
        & "(x" & lstListBox1.List(i, 3) & ")" & " " & lstListBox1.List(i, 2) & " " & lstListBox1.List(i, 4) & ", "
    End If
Next i

If selList= "" Then
    selList= ""
Else
    selList= Left(selList, Len(selList) - 2)
End If

MsgBox selList
End Function