|
▼リョウ さん:
>「商品番号と部品番号を入力すると単価を表示する表」をVBAで作っています。
>・ワークシートのA列に商品番号、B列に部品番号が入っており、C列に単価を
>表示したいと考えています。
>・同じワークシート内に参照先(H列〜J列)があり、H列に商品番号、I列に番号、
>J列にサイズが書かれています。
>
>この表を使ってマクロを書くのに、どのような構成にするか考えたのが次の通りです。
>a. A列に入力された商品番号が表のH列に無かった場合→C列に「再確認」と表示
>b. A列に入力された商品番号が表のH列にあった場合→その右セル(I列)に書かれた部品番号がB列と一致するかどうか判断。
> △B列とI列が一致した場合で、J列が"大"の場合はC列に1000を表示。
> ▲B列とI列が一致した場合で、J列が"小"の場合はC列に500を表示。
> ▽B列とI列が一致しなかった場合は、C列に「サイズを選択」と表示
疑問点はH列I列が同じで大と小が各々あるときはどうするのかな?
疑問点は置いておいて
ディクショナリで処理をしてみました。
Sub TestA()
Dim v1 As Variant
Dim v2 As Variant
Dim Dic1 As Object
Dim Dic2 As Object
Dim i As Long
With Worksheets("Sheet1")
v1 = .Range("H1:J" & .Range("H" & .Rows.Count).End(xlUp).Row).Value
v2 = .Range("A1:C" & .Range("B" & .Rows.Count).End(xlUp).Row).Value
End With
Set Dic1 = CreateObject("Scripting.Dictionary")
Set Dic2 = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(v1)
Dic1(v1(i, 1)) = Empty
Select Case v1(i, 3)
Case "大"
Dic2(v1(i, 1) & vbTab & v1(i, 2)) = 1000
Case "小"
Dic2(v1(i, 1) & vbTab & v1(i, 2)) = 500
Case Else
Dic2(v1(i, 1) & vbTab & v1(i, 2)) = 0
End Select
Next
For i = 1 To UBound(v2)
If Dic1.Exists(v2(i, 1)) = True Then
If Dic2.Exists(v2(i, 1) & vbTab & v2(i, 2)) = True Then
v2(i, 3) = Dic2(v2(i, 1) & vbTab & v2(i, 2))
Else
v2(i, 3) = "サイズを選択"
End If
Else
v2(i, 3) = "再確認"
End If
Next
Worksheets("Sheet1").Range("A1").Resize(UBound(v2), 3).Value = v2
End Sub
|
|