• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAリストボックスへの複数列の項目追加について)

VBAリストボックスへの複数列の項目追加について

このQ&Aのポイント
  • VBAのリストボックスへの複数列の項目追加に苦戦しています。
  • 現在のコードでは正常に動作せず、エラーが発生しています。
  • 他の手法や配列を使用する方法などがあれば教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.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

mt09er
質問者

お礼

重ねてのご回答、誠にありがとうございました。 説明が分かりづらく申し訳ありません。 watabe007さんのお陰でやりたい事を実現出来ました。 本当にありがとうございました。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>配列の手法などありましたら、教えて下さい。 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

mt09er
質問者

補足

ご助言ありがとうございます。 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)
回答No.1

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

mt09er
質問者

お礼

ご助言頂き、誠にありがとうございます。 非表示にするやり方で、実現出来る事が確認出来ました。 ただ、今回はwadabe007さんの手法を用いる事に致しました。 (リストボックスに載せたデータをそのままcsvデータとして出力する為。) また、watabe007さんへ補足で伺っており、もしそちらもお知恵をお貸し頂けましたら幸いです。 誠にありがとうございました。

関連するQ&A