我正在尝试找到一个公式来查找小数点后第一个数字的位置,这个位置在两个numbres之间是不同的,例如:
5.4452和5.4413将返回给我3(即小数点后的第三个数字不同)。在excel中有一种简单的方法吗?
感谢。
答案 0 :(得分:2)
这会将每个数字的文本版本与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 Balhoff的编辑,似乎适用于所有情况:
=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))
答案 1 :(得分:1)
我无法想到一个简单的方法,但如果你真的需要用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。
答案 2 :(得分:1)
尝试以下 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)非常易于安装和使用:
如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除UDF:
从Excel使用UDF:
=比较(A1,A2)
要了解有关宏的更多信息,请参阅:
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的详细信息
必须启用宏才能使其生效!
答案 3 :(得分:1)
最终,我认为如果您决定在不使用VBA的情况下使用Excel中的公式来完成此任务,则该任务可能需要一些蛮力。我并不是说没有对数操作来完成这项工作(而且我已经足够了解数学书呆子以便稍后处理这个问题)但你最终可能会遇到如下蛮力:
=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)))))
答案 4 :(得分:1)
此数组公式** 似乎有效:
= MATCH(TRUE,MMULT(IFERROR(0 + MID(MID(A1:B1,FIND(&#34;&#34;,A1:B1)+1,1000),ROW(INDIRECT(&# 34; 1:1000&#34;)),1),0),{1; -1})&LT;&GT; 0,0)
此致
**数组公式的输入方式与&#39;标准&#39;相同。公式。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果您已正确完成,您会注意到Excel在公式周围放置了大括号{}(尽管不要尝试自己手动插入这些括号)。