エクセルVBA でのリストボックスの質問です。


ユーザーフォームにリストボックスを設置し3列の表示をしたいと思います。

1列目にシート1のA列を表示し、2列目にシート1のD列を表示し。3列目にB列を表示したいのですがこの場合、どのように設定すればいいのでしょうか?

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2008/06/22 15:32:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント35pt

作業シートを作って各列をコピーして一つの範囲にしてしまうと、

RowsorceプロパティやListプロパティが使えそうですが、作業シートを作らない方法でやってみました。

あまりスマートな方法ではありませんが。

UserFormのInitializeイベントで配列に読み込ませて設定する方法です。

Private Sub UserForm_Initialize()
    Dim LastRow1 As Long
    Dim LastRow2 As Long
    Dim LastRow3 As Long
    Dim MaxRow As Long
    Dim myData() As String
    Dim i As Long
    
    LastRow1 = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
    LastRow2 = Sheet2.Range("D" & Rows.Count).End(xlUp).Row
    LastRow3 = Sheet3.Range("B" & Rows.Count).End(xlUp).Row
    
    If LastRow1 > LastRow2 Then
        MaxRow = LastRow1
    End If
    If LastRow3 > MaxRow Then
        MaxRow = LastRow3
    End If
    
    ReDim myData(2, MaxRow)
    
    For i = 1 To MaxRow
        myData(0, i - 1) = Sheet1.Range("A" & i).Value
        myData(1, i - 1) = Sheet2.Range("D" & i).Value
        myData(2, i - 1) = Sheet3.Range("B" & i).Value
    Next i
            
    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "50;50;50"
        .Column = myData
    End With
End Sub
id:iwasakitetsurin

丁寧に回答を有難う御座いました。

参考になりました。

無事に解決致しました。

2008/06/22 15:32:07

その他の回答1件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント35pt

作業シートを作って各列をコピーして一つの範囲にしてしまうと、

RowsorceプロパティやListプロパティが使えそうですが、作業シートを作らない方法でやってみました。

あまりスマートな方法ではありませんが。

UserFormのInitializeイベントで配列に読み込ませて設定する方法です。

Private Sub UserForm_Initialize()
    Dim LastRow1 As Long
    Dim LastRow2 As Long
    Dim LastRow3 As Long
    Dim MaxRow As Long
    Dim myData() As String
    Dim i As Long
    
    LastRow1 = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
    LastRow2 = Sheet2.Range("D" & Rows.Count).End(xlUp).Row
    LastRow3 = Sheet3.Range("B" & Rows.Count).End(xlUp).Row
    
    If LastRow1 > LastRow2 Then
        MaxRow = LastRow1
    End If
    If LastRow3 > MaxRow Then
        MaxRow = LastRow3
    End If
    
    ReDim myData(2, MaxRow)
    
    For i = 1 To MaxRow
        myData(0, i - 1) = Sheet1.Range("A" & i).Value
        myData(1, i - 1) = Sheet2.Range("D" & i).Value
        myData(2, i - 1) = Sheet3.Range("B" & i).Value
    Next i
            
    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "50;50;50"
        .Column = myData
    End With
End Sub
id:iwasakitetsurin

丁寧に回答を有難う御座いました。

参考になりました。

無事に解決致しました。

2008/06/22 15:32:07
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント35pt

リストボックスのオブジェクト名は、

ListBox1

フォーム名は、

UserForm1

でセットしています。


UserForm1.ListBox1.Clear
UserForm1.ListBox1.AddItem (Sheets("シート1").Cells(1, "A"))
UserForm1.ListBox1.AddItem (Sheets("シート1").Cells(1, "D"))
UserForm1.ListBox1.AddItem (Sheets("シート1").Cells(1, "B"))


それぞれセットする列は指定してありますが、どの行かは 不明なため 1行目をセットしています。

id:iwasakitetsurin

丁寧に回答を有難う御座いました。

参考になりました。

無事に解決致しました。

2008/06/22 15:32:13
  • id:SALINGER
    勘違いしてました。
    全てシート1だったのですね。
    コード中のSheet2とSheet3をSheet1に変えてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません