我需要一個 VBA 代碼來搜索特定的名稱(第一個下拉串列)、產品(第二個下拉串列),然后回傳單價。我可以使用 VLOOKUP 搜索名稱并回傳單價,但我需要搜索名稱和產品并能夠快速提取價格。我使用了 Evaluate 函式,但結果是 #VALUE!
Sub unitPrice()
Set sh4 = ThisWorkbook.Sheets("Invoice")
Set sh5 = ThisWorkbook.Sheets("Unit Price")
sh4.Range("H18") = _
sh4.Evaluate("MATCH(" & sh4.Cells(11, 1).Address(False, False) _
& "&" & sh4.Cells(18, 1).Address(False, False) _
& ",'Sh5!B2:B5&sh5!A2:A5,0)")
End Sub
發票和單價表的螢屏截圖
uj5u.com熱心網友回復:
我假設您有兩個表(插入 > 表):tblInvoice 和 tblUnitPrice。在 VBA 中通過參考它們listobject比不參考要容易得多。如果您不使用表格,則必須相應地調整范圍。
我的代碼做什么:它插入一個 INDEX/MATCH-Formula 來檢索表中所有行的 Unitprice - 然后將純值寫回單元格。
Public Sub updateUnitPricesInInvoice()
Dim loInvoice As ListObject
Set loInvoice = ThisWorkbook.Worksheets("Invoice").ListObjects("tblInvoice")
With loInvoice.ListColumns("UnitPrice").DataBodyRange
.Formula2 = "=INDEX(tblUnitPrices[UnitPrice],MATCH(1,(tblUnitPrices[Name]=[@Name])*(tblUnitPrices[Product]=[@Product])))"
.value = .value
End With
End Sub
uj5u.com熱心網友回復:
這是沒有表/串列物件的解決方案:
假設:您已為發票表上的以下單元格添加名稱
- A11:客戶
- A17:標簽說明
- H17:標簽單價
- H28:標簽總金額
在第一步中,我們檢索兩個標簽“UnitPrice”和“TotalAmount”之間的范圍——這就是公式的所在。
然后將公式寫入該范圍 - 再次使用 INDEX/MATCH。如果沒有描述,則不顯示任何內容(有 ISERROR)
再次:計算公式替換為它們的值后
Option Explicit
Public Sub updateUnitPricesInInvoice()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Invoice")
Dim rgUnitPrices As Range
Set rgUnitPrices = getRangeBetweenTwoLabels(ws, "labelUnitPrice", "labelTotalAmount")
With rgUnitPrices
.Formula2 = "=IFERROR(INDEX(UnitPrice!C:C,MATCH(1,(UnitPrice!A:A=Invoice!" & ws.Range("labelDescription").Offset(1).Address(False, True) & ")*(UnitPrice!B:B=customer),0)),"""")"
.Value = .Value
End With
End Sub
Private Function getRangeBetweenTwoLabels(ws As Worksheet, _
label1 As String, label2 As String)
Dim cStart As Range: Set cStart = ws.Range(label1).Offset(1)
Dim cEnd As Range: Set cEnd = ws.Range(label2).Offset(-1)
Set getRangeBetweenTwoLabels = ws.Range(cStart, cEnd)
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/315580.html
