• 締切済み

VBAでVLOOKUP関数を使う

「在庫検索」に下記条件を追加するには、どうすれば良いのでしょうか。 1)G列が1500より大きければ Results = Application.WorksheetFunction.VLookup(ItemCode, SerchArea, 2, False) 2)G列が1500より小さければ Results = Application.WorksheetFunction.VLookup(ItemCode, SerchArea, 3, False) どちらの際も空白の条件、If ActiveCell.offset(i, 1).value = ""は残ります。 1)、2)とandを組み合わせる方法でチャレンジしたのですが、出来ませんでした。 ------------------------------------------------------------------------ 以下がベースの「在庫検索」です。 一度、質問して解決したのですが、更なる問題が発生してしまいました。 ご指導ください。 ------------------------------------------------------------------------ Sub 在庫数検索() Dim SerchName As String Dim SerchArea As Range Dim Results As Variant '初期設定 Range("A2").Activate ItemCode = Range("A2").Value i = 0 '検索範囲の設定(ポイント1) Set SerchArea =Worksheets("シート2").Range("List1") '商品コードが空になったら終わり Do Until ItemCode = "" If ActiveCell.offset(i, 1).value = "" Then '★1 On Error Resume Next ItemCode = ActiveCell.offset(i, 0).value Results = Application.WorksheetFunction.VLookup(ItemCode, SerchArea, 2, False) If Err <> 0 Then Results = "" ActiveCell.offset(i, 1) = Results End If '★1 i = i + 1 Loop

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ヤリタイことをもうちょっと整理してみると,結局だいたい次のようになります。 sub macro1()  dim Target as range  dim i as long  set target = worksheets("シート2").range("List1")  on error resume next ’A列について巡回する  for i = 2 to range("A65536").end(xlup).row  ’B列が空なら計算する   if cells(i, "B") = "" then   ’VLOOKUPがエラーでなければ記入する    cells(i, "B") = application.worksheetfunction.vlookup(cells(i, "A").value, target, iif(cells(i, "G")>=1500, 2, 3), false)   end if  next i end sub

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

G列というのが、「ItemCode」の値なのだとしたら、以下の様にします。 Do Until ItemCode = "" If ActiveCell.Offset(i, 1).Value = "" Then '★1 On Error Resume Next ItemCode = ActiveCell.Offset(i, 0).Value If ItemCode > 1500 Then ’● Results = Application.WorksheetFunction.VLookup(ItemCode, SerchArea, 2, False)’●   Else’● Results = Application.WorksheetFunction.VLookup(ItemCode, SerchArea, 3, False)’● End If’● If Err <> 0 Then Results = "" ActiveCell.Offset(i, 1) = Results End If '★1 i = i + 1 Loop