Excel:在单个单元格内创build数据集或string
我遇到了一些解决scheme,但我想知道这是否只是Excel的限制,或者是没有办法创build多个值来评估从同一个单元格。 C3从相邻单元格中的所有值创build平均值。
我会解释为什么我想这样做。 我正在研究一个游戏中物品价格的speadsheet,并且希望从一个列的单元格中创build一个伪数据库。 我想要做的一个例子就是在一个单元格中:
2,40,300,200,340
C2(单元名称)没有这样的东西总和所有条目除以条目总数? 所有值的平均值用逗号分隔?
我知道这很容易用多个单元格完成,但我想减less水平混乱,所以想知道是否有任何方法来分离与语法的值,而不使用VBA或过度复杂的代码。
公式是一个熊但是:
=SUMPRODUCT(--MID(SUBSTITUTE(C2,",",REPT(" ",99)),(ROW(INDIRECT("1:" & LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1))-1)*99+1,99))/(LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1)
这里发生了很多事情,所以让我们来分解一下:
LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1
:获取用LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1
隔开的项目数。 在这个公式中使用两次。 第二个是得到平均值的分母。
第二个用于(ROW(INDIRECT("1:" & LEN(C2)-LEN(SUBSTITUTE(C2,",",""))+1))-1)
。 这是迭代的部分。 SUMPRODUCT将导致迭代和总结部分。
该行将返回1,2,3,…返回由LEN(…) – LEN(…)函数返回的内容。 我们减去一个从0开始。
每次迭代乘以99,我们加1,因为MID不以0为起点。
SUBSTITUTE(C2,",",REPT(" ",99))
创build一个string,其中包含99个空格代替每个“,”。
MID将这个由现在100个空格分隔的数字串parsing出来。 第二个标准是从1,100,199,298,…等迭代单元格中的数字个数。 这将永远落在一个空间,因为我们给它一个100空间在哪里着陆。
第三个标准设置每个迭代返回string的长度。 我们使用99,因为它会在数字之后再次出现空格。
MID的前面将导致返回的分析string恢复到一个数字。 这迫使Excel删除多余的空格,并只看到数字。
SUMPRODUCT()维护并增加了每个迭代的总数。
你也可以为你的问题写一个VBA函数:
例:
可以使用该function之前要粘贴的代码:
Public Function AverageCell(allItems As String) As Variant Dim itemArray() As String Dim totalsum As Variant Dim totalav As Long totalsum = 0 totalav = 0 itemArray() = Split(allItems, ",") For Each num In itemArray() totalsum = totalsum + num totalav = totalav + 1 Next num AverageCell = totalsum / totalav End Function