本帖最后由 pobopo 于 2014-8-23 05:46 编辑
【新手】地球村 2014-6-24 星期二 17:26:34
魔方网表 怎么解决这个问题
有知道的不,求解答,谢谢
====================
解答:
宽的平均值行间计算公式:
MFEVAL("value("&SUBSTITUTE($MF(宽)$,"-",")+value(")&")")/MFEVAL("count("&"value("&SUBSTITUTE($MF(宽)$,"-","),value(")&")"&")")
比如“105-89-99-110”,计算:(105+89+99+110)/4,结果:100.75
说明:
思路关键:解析“宽”含有的的特殊格式数据。该数据的主要特征:以“-”作为分隔符。比如“105-89-99-110”,计算:(105+89+99+110)/4
具体做法:比如,在“宽的平均值”字段的行间公式里的设计计算公式,采用字符替换法。比如:将“-”替换成“+”或“,”及其有关字符(此处为value()函数、count()函数),以组成可以计算数值的表达式字符串,然后再使用MFEVAL()解析求值函数求出其值。
-------------------------------------------------------
MFEVAL() 返回公式表达式计算结果。
语法: MFEVAL(expr,[macro1,macro2...])
解释: expr 公式表达式。表达式可以是常量字符串,例如"$MF(数量)$*$(金额)$",可以是通过MFVLOOKUPC从表单里查询出来的文本值,例如MFE(1, MFVLOOKUPC("公式列表","公式", "名称", "转中文大写")),甚至可以是空间变量、组变量或者任何可存储表达式文本的字段宏。
macro1 引用的宏。如果表达式中包含了源表单类的宏,如"$MF(源表单.金额)$",需要在此参数里指定,例如$MF(源表单.数量)$,$MF(源表单.金额)$。
-------------------------------------------------------
==============补充==================
如果有多个“-”出现在数据之间,那么可以按照以下的思路:
先将字符串中全部“-”替换为空格,再使用trim()函数去掉多于的空格,接着按照原来的处理方法将空格替换掉,以组成计算表达式字符串。
---------------------------
--------但是,trim()函数(功能:除了单词之间的单个空格外,清除文本中所有的空格。)只能去除字符串首尾的空格,而字符串中间的空格不会被去除。
--------同时有一个有趣的发现:下面的计算公式,可以正确计算哦。
105+89+99++++110
105-89-99----110
--------------------------------
这样的话,求值就没问题了。
不过,还需要解决数据的计数问题。网友雾慾(QQ昵称)贡献一妙招:
MFEVAL("MFSIZE(MFV("&(SUBSTITUTE("105-89-99----110","-",","))&"))")
----
MFSIZE()计算列表中的元素个数,MFV()返回元素列表。
于是,就有了如下表达式:
-------------------------------------------------------
MFEVAL("value("&SUBSTITUTE($MF(宽)$,"-","+")&")")/MFEVAL("MFSIZE(MFV("&(SUBSTITUTE($MF(宽)$,"-",","))&"))")
-------------------
最后,“立方数”的计算公式:
($MF(长)$*MFEVAL("value("&SUBSTITUTE($MF(宽)$,"-","+")&")")/MFEVAL("MFSIZE(MFV("&(SUBSTITUTE($MF(宽)$,"-",","))&"))")*$MF(厚)$)/1000000
===================================
|