excel中能不能让分母与分子相乘后求和,分母相加求和?如2/3+1/4=(2*3+1*4)/(3+4)
只需要用字符处理函数做
假设2/3在A1中,1/4在B1中——两格均为文本格式
那么
A1的分子:left(a1,find("/",a1)-1)
A1的分母:right(a1,len(a1)-find("/",a1))
B1的分子:left(B1,find("/",B1)-1)
B1的分母:right(B1,len(B1)-find("/",B1))
于是可以在C1中填入以下公式
=(left(a1,find("/",a1)-1)*right(a1,len(a1)-find("/",a1))+left(B1,find("/",B1)-1)*right(B1,len(B1)-find("/",B1)))/(right(a1,len(a1)-find("/",a1))+right(B1,len(B1)-find("/",B1)))
即可
只是有两个这样的分数相加吗,如果只是这样的话还好一些。
假设:A1单元格中为字符串:2/3+1/4,那么,可以在A2中输入:
=(LEFT(A1,FIND("/",A1)-1)*MID(A1,FIND("/",A1)+1,FIND("+",A1)-FIND("/",A1)-1)+MID(A1,FIND("+",A1)+1,FIND("/",A1,FIND("+",A1))-FIND("+",A1)-1)*RIGHT(A1,LEN(A1)-FIND("/",A1,FIND("+",A1))))/(MID(A1,FIND("/",A1)+1,FIND("+",A1)-FIND("/",A1)-1)+RIGHT(A1,LEN(A1)-FIND("/",A1,FIND("+",A1))))
但如果不确定要加多少个这样的分数的话,那么必须要用的数组公式,这个公式就会相当长而复杂,建议用自定义函数(ALF+F11,添加模块,插入如下代码)。定义完自定义公式后就可以直接了:A2中输入:=WA(A1)
Function WA(sExp$)
Dim DT(), DTstr, dNo%
Dim sD#, sW#
DTstr = Split(sExp, "+")
dNo = UBound(DTstr)
ReDim DT(dNo)
For I = 0 To UBound(DT)
DT(I) = Split(DTstr(I), "/")
If UBound(DT(I)) <> 1 Then Exit Function
sD = sD + Val(DT(I)(0)) * Val(DT(I)(1))
sW = sW + Val(DT(I)(1))
Next I
WA = sD / sW
End Function
示例参见附件:
你回答的第二种方法和我想要的结果一样!但是新问题又出现了:EXCEL中分数显示有问题,会约分,如果分母中有小数,显示更有问题,所以我现在想你帮帮忙改一下,还是上例,如A1单元格中公式2/13+12/126+32/45+23/434,在B1单元格中显示分母与分子相乘后的和,即(2*13+12*126+32*45+23*434)=12960,在C1单元格中显示分母相加的和,即(13+126+45+434)=618
你说的要约分或要有小数时有问题是你单元格中是数值,这个程序所做的是表达式的字符串,所以是严格按照你的要求做的,不会进行约分,也没有小数问题,你可以自己算一下试试。
可以看一下下面的例子中,你可以比较一下结果(40/80不会被约成1/2; 还有0.1/0.2也是严格按照你的公式计算的):
如果一定要写一下中间结果,那就把函数稍改一下,增加一个参数vNo,vNo取0或者缺省不写时就是你要的计算结果,取1时分母与分子相乘后的和,取2时就是分母之和,函数修改如下:
Function WA(sExp$, Optional vNo% = 0)
Dim DT(), DTstr, dNo%
Dim sD#, sW#
DTstr = Split(sExp, "+")
dNo = UBound(DTstr)
ReDim DT(dNo)
For I = 0 To UBound(DT)
DT(I) = Split(DTstr(I), "/")
If UBound(DT(I)) <> 1 Then Exit Function
sD = sD + Val(DT(I)(0)) * Val(DT(I)(1))
sW = sW + Val(DT(I)(1))
Next I
WA = Choose(vNo + 1, sD / sW, sD, sW)
End Function
示例下载:
那么
=(LEFT(A1,FIND("/",A1)-1)*RIGHT(A1,LEN(A1)-FIND("/",A1))+LEFT(B1,FIND("/",B1)-1)*RIGHT(B1,LEN(B1)-FIND("/",B1)))/(RIGHT(A1,LEN(A1)-FIND("/",A1))+RIGHT(B1,LEN(B1)-FIND("/",B1)))
a2输入'1/4
那么在b1输入=(LEFT(A1)*RIGHT(A1)+LEFT(A2)*RIGHT(A2))/(RIGHT(A1)+RIGHT(A2))就是结果