2017-05-07 142 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