| 
    
     |  | >> 問題は、単価です。 >
 >> 6.単価(テキストボックス。3.の受注数に対して
 >> それぞれの単価が製品登録のシートに登録されている)
 
 >> 教えていただきたいのは、単価の箇所に3.の受注数を選択すると
 >> 自動的に単価表示ができるようにしたいのです。
 
 >ComboBox2 に製品名を AddItemするとき、同じ行の87,89,91列目
 >もリストに (Column2,3,4に)転記しておけば、
 >さらに、単価も 5,6,7列目に 転記しておけば、
 >話が早いと思います。
 
 この案によるサンプルコードです。
 
 >ロット数は 87,89,91列目にデータがあるわけですよね?
 >
 >A列   C列     CI列    CM列    CK列
 >得意先  製品    ロット1  ロット2  ロット3
 >
 ▼
 >問題の「単価」は何列目に記入されているのですか?
 
 この質問に対するご回答がいただけてないので、
 88,90,92列に 左隣のロット数に対応する「単価」が書き込まれてるものと
 仮定しました。
 
 '【Dictionary】にA列の受注先名を格納 案
 '【ComboBox2】に 製品名 ロット数1,2,3 単価 1,2,3 をリスト
 
 '--------------------------------
 Option Explicit
 Private dic As Object
 
 Private Sub UserForm_Initialize()
 Dim i As Long, ss As String
 
 '(1)ComboBox1に得意先をリスト
 ' 省略
 ComboBox1.List =           '得意先リスト
 
 '(2)ComboBox2用 得意先別 製品行を Dictionaryに登録
 Set dic = CreateObject("Scripting.Dictionary")
 With Worksheets("製品登録")
 For i = 5 To .Range("A65536").End(xlUp).Row
 ss = .Cells(i, 1).Value
 dic(ss) = dic(ss) & "," & i '得意先別 行番号
 Next
 End With
 End Sub
 
 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If Not dic Is Nothing Then Set dic = Nothing
 End Sub
 
 '▼リストから得意先が選択されたら 対応する製品名をComboBox2にセット
 Private Sub ComboBox1_Change()
 Dim i As Long, j As Long, k As Long
 Dim str得意先 As String
 Dim v
 
 str得意先 = ComboBox1.Value
 v = Split(dic(str得意先), ",") '選択得意先 の製品別行番号の _
 配列をDictionaryのItemから取得
 ComboBox2.Clear
 With Worksheets("製品登録")
 For k = 1 To UBound(v)
 i = v(k)               '行番号
 ComboBox2.AddItem .Cells(i, 3).Value 'C列 製品名
 For j = 1 To 6  '受注数(87,89,91)または単価(88,90,92)
 ComboBox2.List(k - 1, j) = .Cells(i, 86 + j).Value
 Next
 Next
 End With
 End Sub
 
 '▼ ComboBox2リストから製品名が選択されたら ロット(受注)数と単価を _
 ComboBox3 にセット
 Private Sub ComboBox2_Change()
 Dim i As Long, j As Long, Index As Long, lot As Long
 
 Index = ComboBox2.ListIndex
 With ComboBox3
 .Clear
 i = -1
 For j = 1 To 6 Step 2
 lot = Val(ComboBox2.List(Index, j))
 If lot > 0 Then
 i = i + 1
 .AddItem lot 'ロット(受注)数
 .List(i, 1) = ComboBox2.List(Index, j + 1)
 End If
 Next
 .ListIndex = i
 End With
 End Sub
 
 '▼ロットが一つ選択されたら、対応する単価をTextBoxに表示
 Private Sub ComboBox3_Change()
 With ComboBox3
 If .ListIndex > -1 Then
 txt単価.Text = .List(.ListIndex, 1)
 End If
 End With
 End Sub
 
 |  |