[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数の設定データを横方向に一括入力するにはどうすればいいですか?』(正光)
Listbox1で業者を選択しListBox3で日付を設定し、ComboBox2で商品を設定したデータをCommandButton1_Clickして横方向にカレンダーTbl(Worksheets("原紙").Range("c3").Resize(31, 23))に入力していきたいのですが、うまくいきません?教えて頂けないでしょうか? ただし、Listbox1とListbox3は複数選択が可能で複数のデータを入力することが出来るように
Private Sub CommandButton1_Click()
Dim tbl As Range Dim 行 As Long Dim 列 As Long
With ListBox1 '業者名が入ってます
For i = 0 To .ListCount - 1 If .Selected(i) = True Then リスト = リスト & " " & " " & " " & .List(i) & vbCrLf ListBox1.Selected(i) = False End If Next i
End With
With ListBox3 ’日付が入ってます。
For 行 = 0 To .ListCount - 1 If .Selected(行) = True Then 列 = ActiveSheet.Cells(行, Columns.Count).End(xlToLeft).Column + 1
If 行 * 列 = 0 Then Exit Sub
Set tbl = Worksheets("原紙").Range("c3").Resize(31, 23) tbl(行, 列).Value = ComboBox2.Value & リスト
ListBox3.Selected(行) = False End If Next 行 End With
ListBox3.Value = "" ComboBox2.Value = "" End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
Listbox1・・・業者 【A社】 B社 【C社】 D社
ListBox3・・・日付 【6/1】 6/2 【6/3】 【6/4】
ComboBox2・・・商品 【いろは】
↓がどのようになれば正解なのですか?
●「原紙」シート ___C___ ___D___ ___E___ ___F___ ___G___ ___H___ 3 4 5 6 7 8 9 10
(もこな2) 2021/06/15(火) 17:10
ありがとうございます。 ___C___ ___D___ ___E___ ___F___ ___G___ ___H___(注文予約欄) 3 A業者商品1 B業者商品3 C業者商品5 → 4 A業者商品2 B業者商品4 C業者商品6 → 5 ・ ・ ・ 6 B業者商品5 C業者商品1 → 7 B業者商品4 C業者商品6 → 8 ・ ・ ・ 9 A業者商品8 →・ ・ 10 B業者商品7 → ・ ・ ・ (日付欄) まずcombobox2で商品を選択しListbox1で業者を選択し最後に日付を選択すれば同じ日付なら ば横にデータが入っていくようにしたいのです (正光) 2021/06/15(火) 17:52
(もこな2) 2021/06/15(火) 20:41
Listbox1・・・商品
【A社】 B社 【C社】 D社 ListBox3・・・日付 【6/1】 6/2 【6/3】 【6/4】 ComboBox2・・・業者 【いろは】 ___C___ ___D___ ___E___ ___F___ ___G___ ___H___(注文予約欄) 3 A業者商品1 B業者商品3 C業者商品5 → 4 A業者商品2 B業者商品4 C業者商品6 → 5 ・ ・ ・ 6 B業者商品5 C業者商品1 → 7 B業者商品4 C業者商品6 → 8 ・ ・ ・ 9 A業者商品8 →・ ・ 10 B業者商品7 → ・ ・ ・ (日付欄) まずcombobox2で業者を選択しListbox1で商品を選択し最後に日付を選択すれば同じ日付ならば横にデータが入っていくようにしたいのです (正光) 2021/06/15(火) 17:52 (正光) 2021/06/16(水) 06:50
Listbox1・・・業者 →商品 ListBox3・・・日付 ComboBox2・・ 商品 →業者
変更前 Listbox1で業者を選択しListBox3で日付を設定し、ComboBox2で商品を設定したデータ 変更後 combobox2で業者を選択しListbox1で商品を選択し最後に(ListBox3で)日付を選択
そうなると【複数】選択される可能性があるのはどの項目なのですか?
【複数選択】されている形で、完成形と選択状態両方の、名称をあわせて提示してください。
"A社"なら"A社"、"A業者"なら"A業者"、"いろは"なら"いろは"、"商品1"なら"商品1"のように、選択されるものと完成予定図を合わせていただかないと、私には理解できません。
(もこな2) 2021/06/16(水) 08:03
【A社】 B社 【C社】 D社 ListBox3・・・日付 【6/1】 6/2 【6/3】 【6/4】 Listbox1・・・商品 【商品1】 商品2 【商品3】 【商品4】 商品5 商品6 ___C___ ___D___ ___E___ ___F___ ___G___ ___H___(注文予約欄) 3 A社商品1 B社商品3 C社商品5 → 4 A社商品2 B社商品4 C社商品6 → 5 ・ ・ ・ 6 B社商品5 C社商品1 → 7 B社商品4 C社商品6 → 8 ・ ・ ・ 9 A社商品8 →・ ・ 10 B社商品7 → ・ ・ ・ (日付欄) まずcombobox2で業者を選択しListbox1で商品を選択し最後に日付を選択すれば同じ日付ならば横にデータが入っていくようにしたいのです 複数選択可能なコントロールはListBox3・・・日付 Listbox1・・・商品の2つです。
(正光) 2021/06/16(水) 11:25
ComboBox2・・・会社名 【A社】 B社 【C社】 D社
■2
>同じ日付ならば
「カレンダーTbl(Worksheets("原紙").Range("c3").Resize(31, 23))」と言っているので想像はつきますが、【同じ日付】とは何を示すのか、出力セル範囲の【行or列】で説明してください。
(万が一誤解があると手間なので)
さらに、想像ですが追記していくと、【23件】以上は表範囲を超えると思うんですが、そこは考慮しなくてよいのですか?
■3
>横にデータが入っていくようにしたい
どうも、【追記】するようなイメージでいるようなので、そうであればレイアウトはマクロ【実行前】と【実行後】の両方を提示してください。
(現状だと、選択していない会社名や商品まで(■2と絡みますが、たぶん日付も)出力されているので訳が分かりません)
(もこな2) 2021/06/16(水) 12:16
【A社】 B社 C社 D社 ComboBox2会社名は複数選択が可能ではありませんでした。
■2 【同じ日付】とは各々会社が商品を注文する日が同じ日、出力セル範囲の【行が日付(Listbox3複数選択可)or列が注文予約欄(各々の会社名(ComboBox2)&商品データ(Listbox1複数選択可)】
【23件】以上は表範囲を超えるが、考慮しなくていいです。
■3 >横にデータが入っていくようにしたい
【1回目実行前】
ComboBox2・・・会社名
【A社】 B社 C社 D社 E社 ListBox3・・・日付 【6/1】 6/2 【6/3】 【6/4】 Listbox1・・・商品 【商品1】 商品2 【商品3】 【商品4】 商品5 商品6
【1回目実行後】
__C___ ___D___ ___E___ (注文予約欄)
3(6/1) A社商品1,3,4 4(6/2) 5(6/3) A社商品1,3,4 6(6/4) A社商品1,3,4 7(6/5) 8(6/6) 9(6/7) 10(6/8) (日付欄)
【2回目実行前】
ComboBox2・・・会社名
A社 【B社】 C社 D社 E社 ListBox3・・・日付 【6/1】 6/2 【6/3】 【6/4】 Listbox1・・・商品 商品1 【商品2】 商品3 商品4 【商品5】 【商品6】
【2回目実行後】
__C___ ___D___ ___E___ (注文予約欄)
3(6/1) A社商品1,3,4 B社商品2,5,6 4(6/2) 5(6/3) A社商品1,3,4 B社商品2,5,6 6(6/4) A社商品1,3,4 B社商品2,5,6 7(6/5) 8(6/6) 9(6/7) 10(6/8) (日付欄) まずcombobox2で業者を選択しListbox1で商品を選択し最後に日付を選択すれば 同じ日付ならば横にデータが入っていくようにしたいのです。 各々の会社が注文する商品の組み合わせはほとんど同じパターンですから 同じ日に別々の会社が重なれば横にデータが入っていくようにしたいのですが もこな2さん ご指導宜しくお願い致します。
(正光) 2021/06/16(水) 20:07
■5
>23件】以上は表範囲を超えるが、考慮しなくていいです。
わかりました。
■6
>>横にデータが入っていくようにしたい
それは察しがついてます。
確認したかったのは【3行目から下方向に6/1〜6/30まで日付ごとになっている】ということでした。
完成予定図のほうはずれてよくわかりませんが、↓はちょっとめんどくさいのでパスします。
【A社商品1,3,4】
■7
とりあえず情報をまとめると、
(1)ListBox3(日付)から【出力行】を求め (2)【出力行】に対応する最終列を求めて右にずらす(出力列) (3)そのセルから右に「ComboBox2(会社名)」と「Listbox1(商品)」を組み合わせたものを出力する
とすればよさそうにおもいます。
■8
>もこな2さん ご指導宜しくお願い致します。
とりあえず考えたことは提示しますが、私にはいまいち詳細が理解できないので一旦ここまでとします。(といいつつコメントするかもですが)
Private Sub UserForm_Initialize() Dim MyDate As Date
Me.ComboBox2.List = Array("A社", "B社", "C社", "D社") Me.ListBox1.List = Split("商品1,商品2,商品3,商品4,商品5,商品6", ",") For MyDate = DateSerial(2021, 6, 1) To DateSerial(2021, 7, 0) Me.ListBox3.AddItem Format(MyDate, "m/d") Next MyDate End Sub '=========================================== Private Sub CommandButton1_Click() Dim i As Long, 出力行 As Long, 出力列 As Long Dim objDIC As Object
If Me.ComboBox2.ListIndex = -1 Then MsgBox "会社名が選択されていません" Exit Sub End If
Set objDIC = CreateObject("Scripting.Dictionary") With Me.ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then objDIC.Add Me.ComboBox2.Text & .List(i), Me.ComboBox2.Text & .List(i) Next i End With If objDIC.Count = 0 Then Exit Sub
With Worksheets("原紙") For i = 0 To Me.ListBox3.ListCount - 1 If Me.ListBox3.Selected(i) Then 出力行 = Day(CDate(Me.ListBox3.List(i))) + 2 出力列 = WorksheetFunction.Max(3, .Cells(出力行, .Columns.Count).End(xlToLeft).Column + 1)
.Cells(出力行, 出力列).Resize(, objDIC.Count).Value = objDIC.keys End If Next i End With End Sub
↑は完成品のプレゼントではありません。ちゃんと研究の上必要な部分をご自身のコードに取り込んでください。
(丸写しして完成!というのはご遠慮ください)
(もこな2) 2021/06/16(水) 21:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.