我有公式将单元格 A2 中的特定值相乘
示例:在A2中,我想将“。”之前的值相乘。有十一,同时我也想在“。”之后添加价值。
我想出了
=11*LEFT(A1,FIND(".",A1)-1)+RIGHT(A1,LEN(A1)-FIND(".",A1))
如果它确实有它工作得很好。介于两者之间,但是当有单个值(例如 1-10 等)时,它会引发错误#VALUE!
如果单元格 A2 中有值 2,我想要的只是它应该返回 22(2*11=22)而不是错误,但是如果有 2.5,它应该首先11*2
乘以剩余的 5(27),换句话说它会在点之前将值相乘,然后在点之后将值相加
更正:感谢@Scott Craner。我错过了这里的重点!
你可以试试这个:
更明确地说:
11*before+after
我们将小数添加为小数而不是整数的其他解释:
假设 A1 中的数字实际上是一个十进制数,那么这将起作用:
或者更整洁一点:
无论 A1 中的数字是否有小数点,这都会起作用。
编辑:要处理负数和正数,请替换
FLOOR.MATH
为QUOTIENT
:你的公式假设有一个“。” 并且没有“。”的情况下没有便利。看
iif(expr, truepart, falsepart)
。在表达式中使用find()
首先确定该字段是否包含“。”,如果包含,请使用上述公式;否则只需乘以 11。您可以使用以下内容,它使用不同的方法将单元格值拆分为多个部分:
它首先将 A1 中的值转换为文本表示形式,该表示形式总是有一个小数,后跟某个值,即使该值为 0。所以“10”变成“10.0”传递到
FILTERXML()
.它使用了非常著名的方法来创建一个 HTML 字符串,该函数可以解析该字符串,创建两个“真正的男孩”......然后传递给矩阵乘法的实际值。
MMULT()
然后很容易得到总和。还可以使用从文字(即:不使用)乘以和求和INDEX()
所需的两个(在这种情况下为四个)元素。MMULT()
{11,1}
SUM()
请记住,对于矩阵数学,顺序很重要,因为它是如何完成的,机械地,所以数组常量(矩阵;
{11,1}
在这种情况下)必须在由 生成的数组(矩阵)之前FILTERXML()
。但如果出于某种原因需要,可以转置其结果并将乘法数组常量放在其后。最后的想法:这个
TEXT(A1,"0.0")
技巧可以与任何其他分解组件的方法一起使用,在这里,或者通常使用数字,以确保在小数点之前和之后都有部分,无论单元格格式如何。