
現在、VBAのリストボックスへの複数列の項目追加に苦戦しております。
まだまだ未熟の為、どうか皆様のお力をお貸し下さい。
手法等、間違えてる箇所があるかと存じますので、ご指摘と、また別に手法がございましたら、ご教授お願い致します。
現在、リストボックスへの複数列の項目追加の為、以下のように記述しておりますが、上手く動きません。
※あらかじめ、UserForm1にリストボックス(ListBox1)と、コマンドボタンを作成しています。
※Sheet1に、添付のように書いております。
Private Sub CommandButton1_Click()
Dim rngTemp1 As Range
Dim rngTemp2 As Range
Dim rngTemp3 As Range
With Sheets("Sheet1")
.Activate
Set rngTemp1 = .Cells(2, 2)
rngTemp1.Select
Set rngTemp2 = .Range(.Cells(2, 4), .Cells(2, 6))
rngTemp2.Select
Set rngTemp3 = Union(rngTemp1, rngTemp2)
rngTemp3.Select
End With
UserForm1.ListBox1.ColumnCount = rngTemp3.Count
UserForm1.ListBox1.List = rngTemp3.Value 'ここでエラー
End Sub
ウォッチ式で見ると、rngTemp3には、rngTemp1の値しか入っておらず、その為にエラーとなっているようです。
が、rngTemp3.Selectの時点では、正常に選択出来ております。
(1)そもそもListプロパティで、離れたセルをリストボックスへ追加するのは無理なのでしょうか?
※Userform1.ListBox1.List=rngTemp2.Valueとすると正常に追加されます。
(2)このような場合を解決する手段は他にありませんでしょうか?(配列の手法などありましたら、教えて下さい。)
※ちなみに実際のデータ列は10列以上ある為、AddItemでは10列目でエラーとなり、無理でした。
環境は、Office2010になります。
説明がわかりづらく申し訳ありませんが、何卒よろしくお願い致します。

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
重ねてのご回答、誠にありがとうございました。
説明が分かりづらく申し訳ありません。
watabe007さんのお陰でやりたい事を実現出来ました。
本当にありがとうございました。
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
この回答への補足
ご助言ありがとうございます。
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
===========================================
お手数おかけしますが、どうかご教授お願い致します。
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
ご助言頂き、誠にありがとうございます。
非表示にするやり方で、実現出来る事が確認出来ました。
ただ、今回はwadabe007さんの手法を用いる事に致しました。
(リストボックスに載せたデータをそのままcsvデータとして出力する為。)
また、watabe007さんへ補足で伺っており、もしそちらもお知恵をお貸し頂けましたら幸いです。
誠にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
このQ&Aを見た人はこんなQ&Aも見ています
-
リストボックスの特定行の背景色
Visual Basic(VBA)
-
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
Excel vba ListBoxについて
Excel(エクセル)
-
-
4
VB6,リストボックスの特定行の色変更は可能?
Visual Basic(VBA)
-
5
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
8
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
9
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA シートモジュール...
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
エクセル 2つの表の並べ替え
-
IIF関数の使い方
-
Excelで、あるセルの値に応じて...
-
VBAのFind関数で結合セルを検索...
-
Changeイベントでの複数セルの...
-
文字列の結合を空白行まで実行
-
エクセル関数の文字列最長一致...
-
VBA 何かしら文字が入っていたら
-
Excel VBAでフォントの色が違う...
-
Sheet1をフィルターで「りんご...
-
空白セルをとばして転記
-
【VBA】2つのシートの値を比較...
-
ExcelVBAでテキストルーレット...
-
EXCEL VBA 元データが略称、参...
-
VBAで「列」を削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
VBA 何かしら文字が入っていたら
-
VBAを使って検索したセルをコピ...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
Changeイベントでの複数セルの...
-
VBAで、離れた複数の列に対して...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
rowsとcolsの意味
-
DataGridViewに空白がある場合...
おすすめ情報