2017-05-07 141 views
0

由於某些原因,我想計算一個價格與物品的重量相比的價格。[Excel-VBA]從單元格中獲取指定價格

我在excel中創建了兩列,我真正想要的是如果我在A1中輸入LBS的數量,對於e.x. 100,產出需要150美元, - B1。我用一個簡單的VBA代碼嘗試過一些東西。 IT的作品,但價格改變加班。在C列(LBS)和D(價格)中,我寫下了磅和價格(在表2中)。 適用於e.x.

LBS Price 
100 150 
200 300 
300 450 

我有下面的代碼:

Private Sub CommandButton1_Click() 
Dim kilo As Integer, result As String 

kilo = Range("A1").Value 

Select Case kilo 
    Case Is >= 300 
     result = "450 euro" 
    Case Is >= 200 
     result = "300 euro" 
    Case Is >= 1 
     result = "150 euro" 
    Case Else 
     result = "nvt" 
End Select 

Range("B1").Value = result 

End Sub 

的問題是列表太長,它進入40000 LBS。在40,000 LBS /重量以上的價格有xxx每500磅/公斤的價格

公式是這樣的100和199磅之間,價格將是€300, - 200和299之間的價格將是450歐元, -

有沒有人有想法?我想要結果單元格,所以如果重量在200到300之間,輸出應該是450歐元, - cell(B4)

非常感謝。

+0

你真的看無論是在重量價格地圖 - 有點像你的'If'語句 - 或轉換權重價的算法,或兩者​​的組合。我不確定有多少人會嘗試構建算法,但有些人可能會,如果他們這樣做,他們會想要完整的權重列表價格值 - 也許編輯您的帖子,以包括現在。 – Ambie

+0

目前該算法看起來是「Weight/100 * 150」,但問題是:該算法在300磅後保持真實。 – Ambie

回答

0

我不是在這裏你的數據結構太清楚,但下面應該幫助您移動在正確的方向:

有了您的LBS名單|價格在表2(列C和d),確保列表升序排序...

=VLOOKUP(A1,Sheet2!C:D,2,True) 

此公式從細胞A1「查找」的值的範圍內Sheet2!C:D的第一列。在找不到匹配的情況下,通過使用True作爲最終參數,我們將(有序)列表視爲一組閾值...達到或超過的最後閾值將被視爲「匹配」行。第三個參數2意味着我們檢索範圍爲Sheet2!C:D的第二個參數。

您可以找到辦公支持頁面VLOOKUPhere

注意,這並非沒有進一步的工作處理您的「最大」。例如,你可以用這個作爲輸入的第二個公式是這樣的:

=If([output] >= [Max], [Per LB Calculation], [output]) 
0

我不太清楚什麼是最高價格,但你可以用下面的公式來計算每PriceFactor「LBS」範圍:

PriceFactor = WorksheetFunction.RoundUp((Kilo/100), 0) 

,然後乘以PriceFactor * 150得到Result

代碼

Option Explicit 

Private Sub CommandButton1_Click() 

Dim Kilo As Long, Result As Long 
Dim PriceFactor As Double 

Kilo = Range("A1").Value 

PriceFactor = WorksheetFunction.RoundUp((Kilo/100), 0) 
Result = PriceFactor * 150 

Range("B1").Value = Result 

End Sub