查找两位数之间不同的小数点后位数

我正在试图find一个公式来查找两位数之间不同的小数点后第一位的位置,例如:

5.4452和5.4413会返回给我3(即小数点后的第三个数字不同)。 在Excel中有没有简单的方法呢?

谢谢。

这将每个数字的文本版本与15位有效小数进行比较:

=IF(A1=A2,"match", MATCH("diff", IF(MID(TEXT(A1,".000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1)<> MID(TEXT(A2,".000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1),"diff",) ,0)) 

这里是Mark Ba​​lhoff的编辑,它似乎适用于所有情况:

 =IF(MOD($A1,1)=MOD($A2,1),"match", MATCH("diff", IF(MID(TEXT(MOD($A1,1),"0.000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1)<> MID(TEXT(MOD($A2,1),"0.000000000000000"),{3,4,5,6,7,8,9,10,11,12,13,14,15},1),"diff",) ,0)) 

我想不出一个简单的方法来做到这一点,但如果你真的需要使用Excel公式来做到这一点,你可以使用辅助单元:

假设单元格A4和B4中的两个数字:

  • 填写连续的数字(让我们假设1):

    0 1 2 3 4 5 6 7 8 9

  • 用下面的公式填充单元格B2:

    =(INT($ A $ 4 * 10 ^ A $ 1)= INT($ B $ 4 * 10 ^ A $ 1))* 1

    并复制公式做正确的。

  • 你想要的号码是:

    = SUM(A2:J2)

如果你想检查更多的小数位,只需在右侧添加更多的单元格。

编辑:这将返回总数小数位数,如果数字是相等的,检查,如果数字不共享相同的整数部分0。

试试下面的UDF

 Public Function compare(r1 As Range, r2 As Range) As Variant Dim l1 As Long, l2 As Long, i As Long If InStr(1, r1.Value, ".") = 0 Or InStr(1, r2.Value, ".") = 0 Then compare = "point missing" Exit Function End If v1 = Split(CStr(r1.Value), ".")(1) v2 = Split(CStr(r2.Value), ".")(1) l1 = Len(v1) l2 = Len(v2) For i = 1 To 9999 If i > l1 Or i > l2 Then compare = "compare failed" Exit Function End If m1 = Mid(v1, i, 1) m2 = Mid(v2, i, 1) If m1 <> m2 Then Exit For Next i compare = i End Function 

用户定义的函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

=比较(A1,A2)

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

有关UDF的细节

macros必须启用这个工作!

最终,我认为如果你决心用Excel中的公式来完成这个任务,而不写VBA,这个任务可能需要一些powershell。 我并不是说没有对数的操作来完成这个工作(而我已经够math的书呆子了,可能会在后面搞砸),但是最终可能会陷入如下的蛮力之中:

 =IF(ROUNDDOWN(K5,1)<>ROUNDDOWN(L5,1),1,IF(ROUNDDOWN(K5,2)<>ROUNDDOWN(L5,2),2,IF(ROUNDDOWN(K5,3)<>ROUNDDOWN(L5,3),3,IF(ROUNDDOWN(K5,4)<>ROUNDDOWN(L5,4),4,IF(ROUNDDOWN(K5,5)<>ROUNDDOWN(L5,5),5,0))))) 

这个数组公式**似乎工作:

= MATCH(TRUE,MMULT(IFERROR(0 + MID(MID(A1:B1,FIND(,A1”。 “:B1)+1,1000),ROW(INDIRECT(” 1:1000" )),1), 0),{1; -1})<> 0,0)

问候

**数组公式不是以与“标准”公式相同的方式input的。 按住CTRL键和SHIFT键,而不是按下ENTER键,然后按ENTER键。 如果你做得对,你会注意到Excel在公式周围放置了大括号(尽pipe不要试图自己手动插入这些)。