|
>> 問題は、単価です。
>
>> 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
|
|