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