EXCEL用VBA多条件计算价格?

需要实现的效果如图:如果是A类,取规格里的最大数,比如30*20取30,所对应数据源里的30~33的价格是红色部分,然后在单价一栏自动按型号填写22/mm,并且自动算总价,总价是(30*单价*数量)如果是B类,数量所对应的范围值列就是对应的价格,比如300,在101~500,则对应的价格是绿色部分,总价就是(数量*单价)如果是C类,则对应指定规格,比如40*60所对应的价格是蓝色部分,和上面一样,也是自动输入单价和总价如果是D类,计算规格里*两边数值的积,比如2*4,得出值是8,8的范围在6~10,则对应价格是紫色部分,如果值小于1,则按照1计算,总价就是2*4*数量*单价数据在SHEET3,需要引用的表格在SHEET1

根据你的需求,可以使用Excel的VLOOKUP函数实现。具体步骤如下:

    在SHEET1中,根据输入的A/B/C/D类别,使用VLOOKUP函数查找对应的规格范围、数量范围和单价。例如,对于A类别,可以使用以下公式:

=VLOOKUP(A2,Sheet3!$A$2:$D$7,2,TRUE)

    其中,A2是输入的类别,Sheet3!$A$2:$D$7是存储数据的表格,2表示返回第2列(即规格范围),TRUE表示使用近似匹配。

    对于数量范围和单价,可以类似地使用VLOOKUP函数查找。

    根据规格范围和数量范围,使用IF函数和AND函数判断应该使用哪种计算方式。例如,对于A类别,可以使用以下公式:

=IF(AND(B2>=30,B2<=33),22/C2*D2*E2,B2*D2*C2)

    其中,B2是输入的规格范围,C2是输入的数量,D2是查找到的单价,E2是规格范围中的最大值。如果规格范围在30到33之间,则使用第一种计算方式;否则,使用第二种计算方式。

    根据计算结果,自动填写总价。例如,在A类别中,可以使用以下公式:

=IF(AND(B2>=30,B2<=33),B2*D2*C2*E2,IF(AND(B2>=101,B2<=500),B2*D2,C2*D2*B2*IF(F2<1,1,F2)))

    其中,F2是规格范围两边数值的积,IF函数用于判断积是否小于1,并按照1计算总价。其他类别的计算方式也可以类似地使用IF函数实现。

    注意,以上公式中的表格和列名可能需要根据实际情况进行调整。

温馨提示:内容为网友见解,仅供参考
第1个回答  2023-03-06
根据您的描述,需要对每个类别的数据进行不同的处理和计算,可以使用IF函数和VLOOKUP函数来实现自动化计算。
首先,针对A类数据,可以使用以下公式计算单价和总价:
单价公式:=IF($C2="A",$D2/VLOOKUP(MAX($B2:$F2),$B$8:$F$11,2,TRUE),"")
其中,$C2="A"表示如果当前类别为A类,则执行这个公式;MAX($B2:$F2)表示取当前规格列(B列到F列)的最大值;VLOOKUP函数用来在表格$B$8:$F$11中查找最大值对应的价格;$D2表示数量,用来计算总价;
总价公式:=IF($C2="A",$D2MAX($B2:$F2)/1000$G2,"")
其中,$G2表示长度,需要将其转换为米(单位换算为1000),用来计算总价。
接下来,针对B类数据,可以使用以下公式计算单价和总价:
单价公式:=IF($C2="B",VLOOKUP($D2,$B$17:$E$20,2,TRUE),"")
其中,$C2="B"表示如果当前类别为B类,则执行这个公式;$D2表示数量,用来查找对应的价格范围;VLOOKUP函数用来在表格$B$17:$E$20中查找对应数量的价格;
总价公式:=IF($C2="B",$D2*$E2,"")
其中,$E2表示单价,用来计算总价。
针对C类和D类数据,也可以使用类似的方式进行计算。这里给出一个示例:
C类单价公式:=IF($C2="C",VLOOKUP($D2,$B$26:$E$29,2,TRUE),"")
C类总价公式:=IF($C2="C",$D2*$E2*$G2,"")
其中,$C2="C"表示当前类别为C类,$D2表示数量,$E2表示单价,$G2表示长度。
D类单价公式:=IF($C2="D",IF($D2<1,VLOOKUP(1,$B$35:$E$37,2,TRUE),VLOOKUP($D2,$B$35:$E$37,2,TRUE)),"")
D类总价公式:=IF($C2="D",MAX(1,$D2PRODUCT($B2:$F2))$E2*$G2,"")
其中,$C2="D"表示当前类别为D类,$D2表示规格(例如2*4),$B2:$F2表示将规格拆分成数字的数组(例如{2,4}),PRODUCT函数用来计算数组中所有数字的积。
请将以上公式应用到目标单元格中,并根据实际情况修改表格的引用区域和公式的细节。同时,需要注意公式中使用的表格必须在同一工
第2个回答  2023-03-06

    首先在Excel中打开SHEET3,找到需要计算价格和总价的数据范围,例如A2:B10。

    在一个空白的单元格中输入公式“=A2*B2”,其中A2和B2分别代表需要计算的两个数值。按下回车键,Excel会自动计算出这两个数值的积。

    选中刚刚计算出的单元格,将鼠标移动到单元格右下角的小黑点上,鼠标变成十字箭头后点击并拖动,直到覆盖需要计算的所有单元格。Excel会自动将公式复制到所有选中的单元格中,并计算出对应单元格的积。

    在计算出所有积之后,在一个空白的单元格中输入公式“=IF(积<1,1,

    积)”,按下回车键进行计算。该公式的含义是,如果积小于1,则将积的值设为1,否则保留积的原始值。这一步是为了防止在后续的计算中出现价格为0的情况,确保计算结果的正确性。

    接下来,需要将得到的积的值与价格范围进行匹配,以确定对应的价格。可以使用Excel的“VLOOKUP”函数来实现这一功能。具体操作步骤如下:

    在一个空白的单元格中输入公式“=VLOOKUP(积,Sheet1!A:B,2,TRUE)”,按下回车键进行计算。其中,“积”是前面计算得到的积的单元格地址,“Sheet1!A:B”是数据源的范围,“2”表示需要返回的列数(即价格所在的列),“TRUE”表示需要进行近似匹配。

    Excel会根据积的值在数据源中进行查找,并返回对应的价格。如果积的值在数据源中找不到对应的价格范围,则会返回最接近的价格范围的价格。

    最后,需要计算出每个物品的总价。可以在每个物品的单元格中输入公式“=规格数量单价”,按下回车键进行计算。其中,“规格”、“数量”和“单价”是对应物品的单元格地址。

    在计算出所有物品的总价之后,可以对结果进行格式化和调整,以便更好地展示和使用。例如,可以将价格格式设置为货币格式,并对表格中的数字进行对齐和合并单元格等操作。

    以上就是详细的操作步骤,希望可以对您有所帮助。

第3个回答  2023-03-06

在Excel中,可以使用多种方法来实现你要求的功能。以下是一种可能的实现方式:

    首先,在SHEET3中创建一个表格,用来输入A/B/C/D类别、规格、数量等信息,并计算总价。假设表格数据从第2行开始,列分别为A/B/C/D、规格、数量、单价、总价,则公式如下:

    其中,INDEX和MATCH函数用于根据规格查找对应价格,GCD函数用于计算最大公约数。

    单价:=IF(A2="A", INDEX(SHEET1!�B2:�E5, MATCH(B2, SHEET1!�A2:�A5, 1), 1), IF(A2="B", INDEX(SHEET1!�B2:�E5, MATCH(C2, SHEET1!�A2:�A5, 1), 2), IF(A2="C", INDEX(SHEET1!�B2:�E5, MATCH(B2&"*"&C2, SHEET1!�C2:�C5, 0), 3), IF(A2="D", MAX(1, GCD(B2, C2))*INDEX(SHEET1!�B2:�E5, MATCH(MAX(1, GCD(B2, C2)), SHEET1!�F2:�F5, 1), 4), "")))

    总价:=IF(ISNUMBER(D2)ISNUMBER(E2), D2E2*C2, "")

    在SHEET1中创建一个表格,用来输入不同规格的价格信息。假设表格数据从第2行开始,列分别为规格、101500、3033、40*60、6~10,则按照需要填写每个规格对应的价格。

    注意,以上仅是一种可能的实现方式,具体实现还需要根据实际情况进行调整和优化。

第4个回答  2023-03-05
你可以使用Excel VBA来实现上述功能,可以先使用If...Then...Else结构,根据不同类型的条件,计算出对应的单价和总价,然后再将结果填入表格中。你可以参考下面的代码:
Sub CalcPrice()
Dim type As String
Dim spec As String
Dim qty As Integer
type = Range("A1")
spec = Range("B1")
qty = Range("C1")
If type = "A" Then
Range("D1") = Left(spec, InStr(spec, "*") - 1)
Range("E1") = 22 / 1000
Range("F1") = Range("D1") * Range("E1") * Range("C1")
ElseIf type = "B" Then
Range("D1") = qty
Range("E1") = 22 / 1000
Range("F1") = Range("D1") * Range("E1") * Range("C1")
ElseIf type = "C" Then
Range("D1") = Left(spec, InStr(spec, "*") - 1)
Range("E1") = 22 / 1000
Range("F1") = Range("D1") * Range("E1") * Range("C1")
ElseIf type = "D" Then
Range("D1") = Left(spec, InStr(spec, "*") - 1) * Right(spec, Len(spec) - InStr(spec, "*"))
Range("E1") = 22 / 1000
Range("F1") = Range("D1") * Range("E1") * Range("C1")
End If
End Sub本回答被提问者采纳

EXCEL用VBA多条件计算价格?
根据计算结果,自动填写总价。例如,在A类别中,可以使用以下公式:=IF(AND(B2>=30,B2<=33),B2*D2*C2*E2,IF(AND(B2>=101,B2<=500),B2*D2,C2*D2*B2*IF(F2<1,1,F2)))其中,F2是规格范围两边数值的积,IF函数用于判断积是否小于1,并按照1计算总价。其他类别的计算方式也可以类似地使...

如何在EXCEL表格中,根据给定的多个条件(超过三个条件且含时间区间)自动...
在Q4的位置输入公式 : =if((O4="男式"),(SUMPRODUCT(($B$4:$B$1000=L4)*($C$4:$C$1000=M4)*($M$4:$M$1000=P4)*($E$4:$E$10))),(SUMPRODUCT(($B$4:$B$1000=L4)*($C$3:$C$1000=M4)*($M$3:$M$1000=P4)*($F$4:$F$10)))...

Excel VBA 收费结算模块\/一步一步带你设计【收费管理系统】09
打开数据库,选中tb收费明细,进入设计视图,插入数量和金额字段,分别设置为数字类型。其次,创建新的数据库表tb价格文件,用于存储项目价格和数量对应关系:新建表,设计表结构,便于录入时自动计算收费金额。为了方便用户操作,我们在系统菜单中添加了tb价格文件的入口,并利用复制方法设置编辑代码。此外,我...

如何用Excel VBA 代码写if函数计算不同包裹大小,显示相应的价格,自定义...
Function GetPrice(r1 As Range, r2 As Range)aSize = LCase(Trim(r1.Value))aWeight = r2.Value Select Case aSize Case "large standard"If aWeight <= 2 Then Result = 4.76 ElseIf aWeight <= 3 Then Result = 5.26 ElseIf aWeight > 3 Then Result = 5.26 + (aWeight - ...

excel的数组或VBA:问题有点复杂,计算最接近金额50000元的6种排列组合...
0 8 10 4 1610 1600 1600 1600 50000.00 0 8 10 4 1620 1600 1600 1600 50000.00 0 8 10 4 1630 1600 1600 1600 50000.00 0 8 10 4 1640 1600 1600 1600 50000.00 0 8 10 ...

excel vba 怎么进行多条件判断去重后进行计算?
程序如下图:代码文本:Option Explicit Sub 宏1()Dim arr, db, i, k Set db = CreateObject("Scripting.Dictionary")arr = Range("a1").CurrentRegion For i = 2 To UBound(arr)k = Trim(arr(i, 3))If k <> "" Then If Not db.Exists(k) Then db.Add k, CreateObject("Scripting...

EXCEL如何用VBA实现多条件查询数据?
5、单击“开发工具”——查看代码,打开VBA编辑器,如图所示。6、在VBA编辑器点击插入-模块,如图,7、现在来输入代码:Sub 查找()Dim i As Integer, j As Integer arr1 = Sheets("数据").Range("A2:D" & Sheets("数据").Cells(Rows.Count, "A").End(xlUp).Row)arr2 = Sheets("查找"...

excel里,用VBA对商品名称进行自动判断,从而自动计算总价
可以建议的做法是: 首先,一定要先建立[商品单价列表];例如设[M列为品名,N列为单价]。 有了以上资讯,不用[VBA]即可达成您的需求;只要于C列形成(类似)以下公式: $C2=IF(OR($A2="",$B2<=0),0,VLOOKUP($A2,$M$2:$N$20,2,FALSE)*$B2) (以上公式得以向下填充)执行结果如附图:...

EXCEL 里用多重条件相等时怎么求对应不同值?
(1)用match()函数生成hlookup()函数需要的第三个参数(需要显示结果的行数)。在第三列辅助列M3中输入以下公式并填充公式到该列其余单元格:=MATCH(I3,$A$3:$A$4)+1 (2)用hlookup()函数生成当天总量对应的产品价格。在价格列N3中输入以下公式并填充公式到该列其余单元格:=HLOOKUP(L3,$B...

excel用函数进行多条件计数的问题
在第一个表格的一侧插入透视表,按照职称统计一下。然后,在新排版的表格里应用VLookUp函数对应职称查询统计数量。方法二:对付十分复杂多条件混合多平台多文件的统计,用编程方式,VBA真正把上面第一个作为数据源,举例,假如我要结合远程SQL Server表去查询统计,那就要使用VBA了。

相似回答
大家正在搜