Excel 如何在基于多个条件的整列中应用公式?

Excel 如何在基于多个条件的整列中应用公式?,excel,if-statement,excel-2010,Excel,If Statement,Excel 2010,我有一个Excel文件,其中保存了每月费用的数据以及同事的供应订单。如果一个同事需要一套头套,比如说,它会被放入一张Excel表格中,上面写着它的成本金额。我想使其自动化,因此如果您在一个单元格中输入头集,美元金额将自动出现在“总成本”单元格中。问题是有多个项目可以订购 我已经提出了我认为可以作为一个开始,但不确定如何实施它。我在这里寻找指导和建议 M列包含“电源输入”,如头部套件,腰部支撑等 K列包含“总成本” 然而,M列也可能包含脚垫,和头枕,所以这正是让我感到困惑的地方。我想它会包含一个扩

我有一个Excel文件,其中保存了每月费用的数据以及同事的供应订单。如果一个同事需要一套
头套
,比如说,它会被放入一张Excel表格中,上面写着它的成本金额。我想使其自动化,因此如果您在一个单元格中输入
头集
,美元金额将自动出现在“总成本”单元格中。问题是有多个项目可以订购

我已经提出了我认为可以作为一个开始,但不确定如何实施它。我在这里寻找指导和建议

M列包含“电源输入”,如
头部套件
腰部支撑

K列包含“总成本”


然而,M列也可能包含
脚垫
,和
头枕
,所以这正是让我感到困惑的地方。我想它会包含一个扩展的ELSEIF语句,用于上面的IF语句,但我不确定它是如何工作的

用户选择选项的一种方法是将项目放入列表框中。这可能有助于管理/分离/无意中损坏列表数据,并有助于防止用户输入错误。这只是一个示例,说明了如何直接在工作表上设置(ActiveX)列表框。一些研究还可能向您展示额外的灵活性,例如多列、多选项、弹出式用户表单等

Option Explicit

Private Sub slctLbox()
Dim ws As Worksheet
Dim drng As Range
Dim lBox As MSForms.ListBox
Dim dstrow As Long, dendrow As Long, dstcol As Long, dendcol As Long
Dim lstArr() As Variant

Set ws = Sheets("Sheet1")

'location of data
dstcol = 13 'col M
dstrow = 1  'row 1

    'determine data range
    With ws
        dendcol = .Cells(dstrow, Columns.Count).End(xlToLeft).Column
        dendrow = .Cells(Rows.Count, dstcol).End(xlUp).Row
        Set drng = .Range(.Cells(dstrow, dstcol), .Cells(dendrow, dendcol))
    End With

    Set lBox = Sheets("Sheet1").ListBox1
    'put data into an array
    lstArr = drng
    'setup listbox
    With lBox
        .Clear
        .ColumnHeads = False
        .ColumnCount = 1
        .ColumnWidths = "50"
        'put data array into listbox
        .List = lstArr
        .TopIndex = 0
    End With
End Sub


我没有足够的代表发表评论,但是:

如前所述,Gareth建议的VLOOKUP是您的最佳选择-您必须建立一个项目和价格表,并使用

VLOOKUP(value to lookup(Foot rest in this case),

table to look in (you will usually want to make this static ($A$1:$B$2),

 column to RETURN value from (2 in this case),

and match type (typically you use false/0 for an exact match).
另外请注意,vlookup只会尝试匹配数组最左边的列(如果要在另一列中查找,则需要使用index/match),因此可以在最左边的列中找到值,并在(arguement 3)第三列中返回相应的值

(它不允许我发布图片):

要回答关于ELSEIF的问题,您必须嵌套IFs,这样它很快就会变丑(提示,您可以使用alt enter在公式中进行返回):


所以,在你的例子中,如果(M16=脚部休息,“$20.48”,如果(M16=“Headset”,12,“-”)

Google
VLOOKUP
,这是一个可以为你提供一个更容易维护的方法来实现你想做的事情。早上好,Scott,我对VLOOKUP函数绝对是新手,并且在一定程度上理解它。我唯一不明白的是“2,0”在您提供的图片链接中引用了什么。我理解其他引用。嗨,Motorhead,我的VLOOKUP引用了一个2x4数组-第一个参数检查最左边/第一列是否匹配(在本例中返回第4行)。第三个参数(2)告诉它从哪个列返回(因此我的匹配说“嘿,这个值是在第4行找到的”,然后2参数会说“好的,在第4行,这里是第2列的值”),最后一个参数(0/false)告诉vlookup你想要一个精确的匹配-1=1,“Footrest”=“Footrest”将匹配,1=2,“Footrest”=“Footrest”will not-您可以将其设置为不精确匹配,这将需要对列表进行排序,其结果是返回不超过搜索值的最近值(如果搜索值不存在)
VLOOKUP(value to lookup(Foot rest in this case),

table to look in (you will usually want to make this static ($A$1:$B$2),

 column to RETURN value from (2 in this case),

and match type (typically you use false/0 for an exact match).
> IF(check1,

true_result,

IF(check2,false_result1,false_result2) 

)