- ベストアンサー
VBAリストボックスへの複数列の項目追加について
- VBAのリストボックスへの複数列の項目追加に苦戦しています。
- 現在のコードでは正常に動作せず、エラーが発生しています。
- 他の手法や配列を使用する方法などがあれば教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ListCountを用いて、その都度行数を取得し、行の最後に追加していく・・・ その都度列数(ColumnCount)が変わることは検証していません >Union(.Cells(2, 2), .Range(.Cells(2, 4), .Cells(2, 6))) 同じ行リストが追加されるのでは Dim rngTemp1 As Range, c As Range, v As Variant Dim i As Long, j As Long, k As Long, n As Long With Sheets("Sheet1") .Activate Set rngTemp1 = Union(.Cells(2, 2), .Range(.Cells(2, 4), .Cells(2, 6))) End With n = rngTemp1.Count With Me.ListBox1 .ColumnCount = n ReDim v(.ListCount, 1 To n) For i = 0 To .ListCount - 1 For j = 1 To .ColumnCount v(i, j) = .List(i, j - 1) Next Next For Each c In rngTemp1 k = k + 1 v(.ListCount, k) = c.Value Next .List = v End With
その他の回答 (2)
- watabe007
- ベストアンサー率62% (476/760)
>配列の手法などありましたら、教えて下さい。 Private Sub CommandButton1_Click() Dim rngTemp1 As Range Dim v As Variant, i As Long, n As Long, c As Range With Sheets("Sheet1") .Activate Set rngTemp1 = Union(.Cells(2, 2), .Range(.Cells(2, 4), .Cells(2, 6))) End With n = rngTemp1.Count ReDim v(0, n - 1) For Each c In rngTemp1 v(0, i) = c.Value i = i + 1 Next With Me.ListBox1 .ColumnCount = n .List = v End With End Sub
補足
ご助言ありがとうございます。 watabe007さんの仰られた手法で実施した事で可能になりました。 そこで、重ねてで申し訳ありませんが、教えて下さい。 現在、watabe007さんの手法で実施すると、ListBoxに1行追加された後、 続けて追加した場合、そのListBoxの1行目に上書きされてしまいます。 上記コマンドは、クラスにて定義しており、クリックイベントで呼び出しており、 随時、行数を追加して、データを追加したいと思っています。 ListCountを用いて、その都度行数を取得し、行の最後に追加していくのかと思考錯誤しておりますが、 なかなか上手く動いてくれません。 以下のように記述していますが、追加する行のみが更新され、元あった行は消えていきます。 =========================================== ReDim v(Me.ListBox1.Count, n - 1) For Each c In rngTemp1 v(Me.ListBox1.Count, i) = c.Value i = i + 1 =========================================== お手数おかけしますが、どうかご教授お願い致します。
- watabe007
- ベストアンサー率62% (476/760)
Cells(2, 2)から5列分、取得してListBoxの2列目を非表示(列幅0)にしました。 Private Sub CommandButton1_Click() Dim rngTemp1 As Range With Sheets("Sheet1") .Activate Set rngTemp1 = .Cells(2, 2).Resize(, 5) End With With UserForm1.ListBox1 .ColumnCount = rngTemp1.Count .ColumnWidths = ";0" .List = rngTemp1.Value End With End Sub
お礼
ご助言頂き、誠にありがとうございます。 非表示にするやり方で、実現出来る事が確認出来ました。 ただ、今回はwadabe007さんの手法を用いる事に致しました。 (リストボックスに載せたデータをそのままcsvデータとして出力する為。) また、watabe007さんへ補足で伺っており、もしそちらもお知恵をお貸し頂けましたら幸いです。 誠にありがとうございました。
お礼
重ねてのご回答、誠にありがとうございました。 説明が分かりづらく申し訳ありません。 watabe007さんのお陰でやりたい事を実現出来ました。 本当にありがとうございました。