我在一个单元格里有以下的数字作为文本,现在我需要计算平均数,但我不想创建额外的列,因为数据的长度是不同的。
"12-14-14-16-18-10"
现在我需要计算平均数,但我不想建立额外的列,因为数据的长度是不同的。
有什么方法可以用公式来计算?
换句话说:你想用"-"字符分割字符串值,并计算其元素的平均值?AFAIK唯一的解决方法是使用一个小的宏(也就是用户定义的函数),因为LO Calc没有提供电子表格级别的splitittokenize函数。
一个快速而肮脏的解决方案可能如下。
Function split_average(a)
Dim theArray(UBound(Split(a, "-"))) As Integer
theArray = Split(a, "-")
Dim SumVal As Integer
For i = 0 To UBound(theArray)
SumVal = SumVal + theArray(i)
Next i
split_average = SumVal / (UBound(theArray) + 1)
End Function
当然,这里没有类型检查之类的功能,所以请自行尝试。要使用它,只需将它复制到 StarBasic 标准模块中,保存,然后在电子表格中调用它,使用 =split_average(A1)
. 关于用户定义的一般功能,请参见 LO计算文档.
我知道这是一个老话题,但让我补充我的两分钱。使用 FILTERXML
和一些 XPATH
神奇的=)
=FILTERXML("<t><s>"®EX(A1;"-";"</s><s>";"g")&"</s></t>";"sum(//s) div count(//s)")
我们甚至可以实现对数字节点的检查。
=FILTERXML("<t><s>"®EX(A1;"-";"</s><s>";"g")&"</s></t>";"sum(//s[.*0=0]) div count(//s[.*0=0])")
看着这个,我觉得很遗憾 Excel
不允许在表达式本身内部直接操作。惊讶 LibreOffice
是的!