Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13982 / 76734 ←次へ | 前へ→

【68252】Re:同一ワークシート内の参照先から単価を表示する方法
発言  Yuki  - 11/2/17(木) 16:18 -

引用なし
パスワード
   ▼リョウ さん:
>「商品番号と部品番号を入力すると単価を表示する表」を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
2 hits

【68234】同一ワークシート内の参照先から単価を表示する方法 リョウ 11/2/17(木) 0:45 質問
【68245】Re:同一ワークシート内の参照先から単価を... りん 11/2/17(木) 12:24 回答
【68250】Re:同一ワークシート内の参照先から単価を... めいぷる 11/2/17(木) 15:19 発言
【68252】Re:同一ワークシート内の参照先から単価を... Yuki 11/2/17(木) 16:18 発言

13982 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free