各位大大好
請問能透過EXCEL的VBA實現VLOOKUP多條件選擇嗎?
主要是想透過A表中的"公司"以及"出貨產品"欄位
去查B表中,符合"公司"以及"出貨產品"的那筆資料中的
數量、出貨時間以及包裝等資訊
並回填至A表中
如果用公式的話,可以透過VLOOKUP搭配IF來實現
但筆數一多的話,會寫到頭昏腦脹
可以麻煩各位大大協助指導如何使用VBA巨集來處理嗎?
謝謝!
A.查詢表
檔案下載
https://drive.google.com/open?id=1xk1iB-_pBfsuwseYutp-cm4LAG4ggzY9
B.資料來源
檔案下載
https://drive.google.com/open?id=1HnCQLK_orl5s0cQY2WcDux5ylWeO0YGf
Sheet1=A.查詢表
Sheet2=B.資料來源
Type OneRec
Amount As String
Outboundtime As String
Package As String
End Type
Function myVlookup(ByVal CompanyName As String, ByVal Product As String) As OneRec
Dim retOneRec As OneRec
Dim bRun As Boolean
Dim nRow As Integer
bRun = True
nRow = 1
Do
If (Worksheets("Sheet2").Range("A" & nRow).Value = "") Then
bRun = False
Exit Do
End If
If ((Worksheets("Sheet2").Range("A" & nRow).Value = CompanyName) And (Worksheets("Sheet2").Range("C" & nRow).Value = Product)) Then
retOneRec.Amount = Worksheets("Sheet2").Range("D" & nRow).Value
retOneRec.Outboundtime = Worksheets("Sheet2").Range("E" & nRow).Value
retOneRec.Package = Worksheets("Sheet2").Range("F" & nRow).Value
bRun = False
End If
nRow = nRow + 1
Loop Until bRun = False
myVlookup = retOneRec
End Function
Sub Main()
Dim Result As OneRec
Dim bRun As Boolean
Dim nRow As Integer
bRun = True
nRow = 2
Do
If (Worksheets("Sheet1").Range("A" & nRow).Value = "") Then
bRun = False
Exit Do
End If
Result = myVlookup(Worksheets("Sheet1").Range("A" & nRow).Value, Worksheets("Sheet1").Range("C" & nRow).Value)
Worksheets("Sheet1").Range("D" & nRow).Value = Result.Amount
Worksheets("Sheet1").Range("E" & nRow).Value = Result.Outboundtime
Worksheets("Sheet1").Range("F" & nRow).Value = Result.Package
nRow = nRow + 1
Loop Until bRun = False
End Sub
不需要使用 VBA 的作法是:
將多個欄位值黏起來變成索引鍵 例如 公司名稱_出貨產品名稱
兩個工作表都要建立索引鍵 並建議放在第一欄
再使用 VLOOKUP 查詢索引鍵對應的其他欄位
我不會VBA,所以用公式作業。
首先在G欄將ABC三欄的內容串連。
回到查詢表
點取D2儲存格輸入公式:
=VLOOKUP($A2&$B2&$C2,IF({1,0},工作表1!$G$2:$G$13,工作表1!D$2:D$13),2,0)
再將公式複製到D2:F4儲存格。
如果是多筆資料,那試試只有當前cell中有改變時,只處理該cell變更事件。
像是 如何在 Excel 中的某些儲存格發生變更時執行巨集