我正在从事与频率相关的研究。
我想对每个单元格中的所有数字求和,并将它们减少为单个数字。
有些单元格有 2 个数字,有些单元格有 13 个数字。像这些..
24.0542653897891
25.4846064424057
27
28.6055035477009
我尝试了几个公式来做到这一点。最好的有我 2 位数的数字,我无法再次将其相加以获得单个结果。
像这些公式:
=SUMPRODUCT(MID(SUBSTITUTE(B5,".",""),ROW(INDIRECT("1:"&LEN(B5)-1)),1)+0)
=SUMPRODUCT(1*MID(C5,ROW(INDIRECT("1:"&LEN(C5))),1))
有什么建议吗?
先感谢您。
最佳答案
编辑
根据您的解释您的评论,您想要的是所谓的数字根的所有数字(不包括小数点)。换句话说,重复对数字求和,直到得到一个 数字 .
这可以通过比将数字相加更简单的公式来计算。
=1+(SUBSTITUTE(B5,".","")-1)-(INT((SUBSTITUTE(B5,".","")-1)/9)*9)
对于长数字,我们可以将数字分成两半并处理每一半。例如:
=1+MOD(1+MOD(LEFT(SUBSTITUTE(B5,".",""),INT(LEN(SUBSTITUTE(B5,".",""))/2))-1,9)+1+MOD(RIGHT(SUBSTITUTE(B5,".",""),LEN(SUBSTITUTE(B5,".",""))-INT(LEN(SUBSTITUTE(B5,".",""))/2))-1,9)-1,9)
但是,数字应存储为 TEXT。 当数字存储为数字时,我们看到的可能不一定是那里存储的内容,以及公式(以及 UDF)将处理的内容。
长公式版本将更正工作表上的所有错误,B104 除外。 B104 似乎具有值
5226.9332653096000
但 Excel 确实存储了值 5226.9333265309688
.由于 Excel 的精度限制,这将被处理为 5226.93332653097
.因此会有分歧。另一种应该有效的方法将 B 列中的所有结果四舍五入到 15 位(例如:。结合使用长公式版本应该会导致您显示的所有值一致。
解释
n MOD 9
=1+Mod(n-1,9)
MOD
计算的数字。函数,我们既需要删除点,也需要使用 mod 的等价物 n-(int(n/9)*9)
如果您的数字 > 15 位,那么我建议使用 VBA 用户定义函数:
Option Explicit
Function digitalRoot(num As String) As Long
Dim S As String, Sum As Long, I As Long
S = num
Do While Len(S) > 1
Sum = 0
For I = 1 To Len(S)
Sum = Sum + Val(Mid(S, I, 1))
Next I
S = Trim(Str(Sum))
Loop
digitalRoot = CLng(S)
End Function
关于excel - 对 Excel 单元格中的数字求和(长字符串和短字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61725296/