[[20210615132933]] 『複数の設定データを横方向に一括入力するにはどう』(正光) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数の設定データを横方向に一括入力するにはどうすればいいですか?』(正光)

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

列 = ActiveSheet.Cells(行, Columns.Count).End(xlToLeft).Column + 1この部分をどのように変更すればいいか分かりません
(正光) 2021/06/15(火) 19:10

うーん。さっぱりわかりません。
こちらが提示した条件(Listbox1、Listbox3の選択状況)にあわせてレイアウト提示されるか、希望の完成図にあわせて選択条件(Listbox1、Listbox3、ComboBox2の状況)を提示しなおしされるのが筋じゃないですか?
提示されたものだと、複数選択しないはずのComboBox2(商品)が複数ありますし少なくとも私には状況が理解できません。

(もこな2) 2021/06/15(火) 20:41


もこな2様本当にすいませんでした。

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


ComboBox2・・・会社名
  【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


■1
>複数選択可能なコントロールはListBox3・・・日付
>Listbox1・・・商品の2つです。
ならば、↓はおかしくないですか?(これでは複数選択しているイメージですよね。)
 ComboBox2・・・会社名
  【A社】
    B社
  【C社】
    D社

■2
>同じ日付ならば
「カレンダーTbl(Worksheets("原紙").Range("c3").Resize(31, 23))」と言っているので想像はつきますが、【同じ日付】とは何を示すのか、出力セル範囲の【行or列】で説明してください。
(万が一誤解があると手間なので)
さらに、想像ですが追記していくと、【23件】以上は表範囲を超えると思うんですが、そこは考慮しなくてよいのですか?

■3
>横にデータが入っていくようにしたい
どうも、【追記】するようなイメージでいるようなので、そうであればレイアウトはマクロ【実行前】と【実行後】の両方を提示してください。
(現状だと、選択していない会社名や商品まで(■2と絡みますが、たぶん日付も)出力されているので訳が分かりません)

(もこな2) 2021/06/16(水) 12:16


■1 ComboBox2・・・会社名
  【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


■4
>ComboBox2会社名は複数選択が可能ではありませんでした。
そうです「ComboBox」ですからね。

■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.