2014-09-29 54 views
1

我想统计单个单元格中的数字个数。计算单个单元格中的数字个数

实施例:

在单元格A1,我有以下加成:

=12+45+23+51+10其中总计(和节目)141

在B1单元格中,我想知道有多少个数字加在一起,这意味着应该有5个数字(12是一个数字,45是另一个数字,等等......并且总共有5个数字在单元格A1)。

我知道这似乎是一个荒谬的问题,但我扫描了这个问题的所有平台,并没有找到任何合适的解决方案。尝试了所有LENLEN SUBSTITUTE替代品,但不知何故,它不起作用。

非常感谢您的帮助。最佳的解决方案将是一个优秀的公式,或者VBA也可以工作。

+0

统计操作员数量并添加一个。得到你需要使用公式文本的公式,它包含在一个excel插件中http://office.microsoft.com/en-us/excel-help/formulatext-function-HA102753280.aspx或者你必须使用一些vba:http ://dmcritchie.mvps.org/excel/formula.htm – xQbert 2014-09-29 19:44:29

回答

2

Excel 2013有一个新函数Formulatext(),它返回的是公式文本。使用Len()和Substitute()方法。

=LEN(FORMULATEXT(A1))-LEN(SUBSTITUTE(FORMULATEXT(A1),"+",""))+1 

enter image description here

-1

试试这个:

= LEN(替代(F16, “+”, “+”))

注:F16是只为你想做的指望电池为例名。

例子:

F16=45+65+76 # Gives 186 
F17=LEN(SUBSTITUTE(F16,"+","+")) # Gives 3 
+1

如果F16包含45 + 46 + 47 + 48它仍然返回3. Len和替代操作的结果186而不是公式。 – xQbert 2014-09-29 19:50:38

+0

你是绝对正确的。但是,如果您复制F16并将其与求和单元格(作为文本)粘贴到另一个单元格中,它就可以工作。 – Nikleotide 2014-09-29 20:45:30

+0

你能否澄清“粘贴(如文本)”? – pnuts 2014-09-29 23:27:37

0

*有没有办法做到这一点,而不使用写入Excel中VBA用户定义函数(UDF)。像这样的东西应该工作:

Public Function numsAdded(cell1 As Range) 
    Dim formulaString As String 
    formulaString = cell1.Formula 
    numsAdded = Len(formulaString) - Len(Replace(formulaString, "+", "")) + 1 
End Function 

一旦你补充说,到VBA模块,可以在电子表格中的任意单元格使用它作为一个功能。

*编辑 - 显然有一种方法,如果你有Excel 2013,就像特林建议的那样。如果您使用2010或更早版本,您需要VBA。

0

使用此VBA: Function GetFormula(Cell as Range) as String GetFormula = Cell.Formula End Function

,然后拿到号码的数量...

=LEN(GetFormula(D99))-LEN(SUBSTITUTE(GetFormula(D99),"+",""))

这个作为我的D99内容

... =45+46+47+50+100

enter image description here

o这里主要的缺点是我假设一切都是+,如果你有 - ,*,或者其他操作员,这会变得更具挑战性。你可能可以使用替换,但是你总是被限制在4个基本的操作符上......如果有人使用了指数或者mod,这将会更困难。

2

按下Alt + F11和插入 - >模块具有以下VBA:

Function NumCount(Rng As Range) 
x = Split(Rng.Formula, "+") 
NumCount = UBound(x) + 1 
End Function 

然后就可以调用=NumCount(A1)上的任何细胞,以获得公式为小区号码的数量。

0

也有可能在早期Excel版本而不VBA - 遵守(i)总是存在在细胞中的至少一个值,(ii)所述操作者总是+和(iii)的单元格在一列中。

在该列替换='=,应用替代,说:

=LEN(A1)-LEN(SUBSTITUTE(A1,"+",""))+1 
在不同的列

和选择性粘贴,数值结果对其他列。然后以'作为分隔符应用原始列上的文本到列。

相关问题