对 Excel 单元格中的数字求和(长字符串和短字符串)

Sah*_*ous 5 excel excel-formula

我正在从事与频率相关的研究。

我想对每个单元格中的所有数字求和,并将它们减少为单个数字。

有些单元格有 2 个数字,有些则有 13 个数字。像这些..

24.0542653897891
25.4846064424057
27
28.6055035477009
Run Code Online (Sandbox Code Playgroud)

我尝试了几个公式来做到这一点。最好的有我 2 位数字,我无法再次求和得到一个结果。

像这些公式:

=SUMPRODUCT(MID(SUBSTITUTE(B5,".",""),ROW(INDIRECT("1:"&LEN(B5)-1)),1)+0)
=SUMPRODUCT(1*MID(C5,ROW(INDIRECT("1:"&LEN(C5))),1))
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?先感谢您。

Ron*_*eld 6

编辑

根据您的解释您的评论,似乎您想要的是所有数字(不包括小数点)的数字根。换句话说,重复对数字求和,直到得到一个数字

这可以通过比数字相加更简单的公式来计算。

=1+(SUBSTITUTE(B5,".","")-1)-(INT((SUBSTITUTE(B5,".","")-1)/9)*9)
Run Code Online (Sandbox Code Playgroud)

对于长数字,我们可以将数字分成两半并处理每一半。例如:

=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)
Run Code Online (Sandbox Code Playgroud)

但是,数字应存储为文本。 当数字存储为数字时,我们看到的可能不一定是存储在那里的内容,以及公式(以及 UDF)将处理的内容。

长公式版本将更正工作表中除 B104 之外的所有错误。B104 似乎具有该值,5226.9332653096000但 Excel 确实在存储该值5226.9333265309688。由于 Excel 的精度限制,这将被处理为5226.93332653097. 因此会有分歧。

另一种应该有效的方法是将 B 列中的所有结果四舍五入为 15 位数字(例如: . 将其与使用长公式版本相结合应该会导致您显示的所有值都一致。

解释

  • 如果一个数能被 9 整除,则其数根为 9,否则数根为 n MOD 9

  • 一般公式是: =1+Mod(n-1,9)

    • 在您的情况下,由于我们处理的数字大于使用该MOD函数可以计算的数字,因此我们需要删除点,并使用 mod 的等效项,即n-(int(n/9)*9)
  • 笔记:
    • 这将最适合以文本形式存储的数字。由于 Excel 可能会显示和/或转换大数字或带有许多小数位的数字,与预期不同,因此使用数字文本字符串是最稳定的方法。
    • 对于大于 15 位的数字,此方法将无法可靠地工作。

如果您的数字大于 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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • @SaherAl-Sous 这可以用一个更简单的公式来完成。查看我的编辑 (2认同)