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)
有什么建议吗?先感谢您。
编辑
根据您的解释您的评论,似乎您想要的是所有数字(不包括小数点)的数字根。换句话说,重复对数字求和,直到得到一个数字。
这可以通过比数字相加更简单的公式来计算。
=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)如果您的数字大于 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)