Excel 查找错误

Excel 查找错误

我有公式来乘以单元格 A2 中的特定值

例如:在 A2 中,我想将“。”之前的值乘以 11,同时还想将“。”之后的值相加。

我想出了

=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),换句话说,它将乘以点之前的值,然后相加点之后的值

答案1

更正:感谢@Scott Craner。我错过了这里的重点!

您可以尝试以下操作:

=LET(x,A1,decpos,FIND(".",x),before,IFERROR(LEFT(x,decpos-1),x),after,IFERROR(MID(x,decpos+1,LEN(x)),0),11*before+after)

更明确地说:

  1. 让 x 成为 A1 中的值
  2. 让 decpos 成为小数点的位置
  3. 让 before 成为小数点左边的字符,或者如果 decpos 是错误(即没有小数点),则让 before 成为整个值
  4. 令 after 为小数点后的字符,或 0(如果 decpos 是错误)
  5. 返回计算结果11*before+after

其他解释中我们将小数作为小数添加,而不是作为整数添加:

假设 A1 中的数字实际上是一个十进制数,那么这将起作用:

=11*FLOOR.MATH(A1)+(A1-FLOOR.MATH(A1))

或者更整洁一点:

=LET(x,A1,y,FLOOR.MATH(x),11*y+(x-y))

在此处输入图片描述

无论 A1 中的数字是否有小数点,这都会起作用。

编辑:为了处理负数和正数,请替换FLOOR.MATHQUOTIENT

=LET(x,A1,y,QUOTIENT(x,1),11*y+(x-y))

答案2

您的公式假设存在“。”,而对于没有“。”的情况则没有办法。请看iif(expr, truepart, falsepart)find()在表达式中使用,首先确定字段是否包含“。”,如果包含,则使用上述公式;否则只需乘以 11。

答案3

您可以使用以下不同的方法将单元格值拆分成几部分:

=MMULT({11,1},FILTERXML("<group><element>"&SUBSTITUTE(TEXT(A1,"0.0"),".","</element><element>")&"</element></group>","/*/*"))

它首先将 A1 中的值转换为文本表示形式,该文本表示形式始终具有小数,后跟某个值,即使该值为 0。因此,“10”在传递到 时变为“10.0” FILTERXML()

它使用非常著名的方法来创建一个 HTML 字符串,该函数可以解析该字符串并创建两个“真正的男孩”......实际值,然后将其传递到矩阵乘法中。

MMULT()然后就很容易得到和了。也可以使用得到文字(即不使用)乘法INDEX()所需的两个(本例中是四个)元素,然后将它们相加。MMULT(){11,1}SUM()

请记住,对于矩阵数学,顺序很重要,因为它是如何机械地完成的,因此数组常量(矩阵; {11,1}在本例中)必须位于由 生成的数组(矩阵)之前FILTERXML()。但如果出于某种原因需要,可以转置其结果并将乘法数组常量放在其后面。

最后的想法:这个TEXT(A1,"0.0")技巧可以与任何其他分解组件的方法一起使用,或者通常与数字一起使用,以确保小数点前后都有部分,而不管单元格格式如何。

相关内容