現在、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も見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
エクセルVBA ListBox最初と最後を選択
Excel(エクセル)
-
VBA リストボックス内の値を複数選択し別シートに転記するには
Visual Basic(VBA)
-
-
4
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
5
VBAのテキストボックスに文字列を貼り付ける方法
Access(アクセス)
-
6
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
7
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
8
エクセルVBAで複数選択できるように設定したリストボックスの、選択され
Visual Basic(VBA)
-
9
ListBoxで改行したい
Visual Basic(VBA)
-
10
【VBA Excel】ドラッグアンドドロップをしたい
Excel(エクセル)
-
11
UserForm.showでマルチページ1を見出し
Visual Basic(VBA)
-
12
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
13
LISTBOXの内容が更新されません。
Visual Basic(VBA)
-
14
VBAでEXCELに埋め込んだPDFを開く方法
その他(Microsoft Office)
-
15
フォーム上のリストボックスに重複して表示しています
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の結合を空白行まで実行
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
targetをA列のセルに限定するに...
-
ExcelVBA修正のお願い
-
VBAで10行おきにセルの下に罫線...
-
VBAのFind関数で結合セルを検索...
-
マクロ 最終列をコピーして最終...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
vba 2つの条件が一致したら...
-
Excel2010 VBAでスペース区切り
-
C# dataGridViewの値だけクリア
-
VBマクロ 色の付いたセルを...
-
VBScriptでfindを使うには??
-
VBAで、特定の文字より後を削除...
-
VBAリストボックスへの複数列の...
-
vba 等間隔の列に対しての計算
-
別シートのデータを参照して値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
マクロ 最終列をコピーして最終...
-
VBAを使って検索したセルをコピ...
-
データグリッドビューの一番最...
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
Excel(M365) Vlookup/セル反転(...
-
VBA指定行削除
-
VBAでのリスト不一致抽出について
-
C# dataGridViewの値だけクリア
-
Changeイベントでの複数セルの...
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
おすすめ情報