在Excel 2010中将stringparsing为数组(不含VBscript)
我有一大堆包含任意长度数组的单元格,它们以分号分隔的string存储,长度范围为1到65个条目,如:
- pcmsh15(232); pcmsh16(232); pcmsh17(136);
- pcmsh12(40);
- pcmsh12(40);
- pcmsh12(5); pcmsh15(20);
我想要一种方法来总结Excel 2010中圆括号中的数字而不使用VBA,请记住它们是任意长度的string,每个string都包含在它们自己的单元格中。
我目前得到了一个VBA函数,我写了括号中的数字,但它减慢了我的电子表格。 我知道我可以使用Excel的SUBSTITUTE函数来将分号分隔的数组变成Excel的内部数组格式,比如
="{"&SUBSTITUTE([@[data]],";",",")&"}"
但不幸的是,Excel不会将其parsing为SUM或COUNTIF中的数组,只能作为string。 我find的一个解决方法是使用string格式的数组引用单元格的命名区域,但是由于在单元格中我也有这些数组的任意数量,所以我无法命名每个单元格。
像“纯粹”的Excelfunction可能是这样的吗?
你可以在没有VBA的情况下做到这一点。 不过,这种方法有点荒谬。 但是,只是为了好玩
在单元格B4
我放入了一个你想“parsing”的string:
B4: pcmsh15(232);pcmsh16(232);pcmsh17(136);
然后我把下面的公式放在指定的单元格中:
B6: =SUBSTITUTE(B4,"pcmsh", """dummy") B8: =SUBSTITUTE(B6,"(",""";") B10: =SUBSTITUTE(B8,")","") B12: =MID(B10, 1, LEN(B10)-1) B14: ="{"&B12&"}"
将起始文本转换为合法Excel数组的文本表示forms:
B14: {"dummy15";232;"dummy16";232;"dummy17";136}
您可以让Excel评估该string,并使用以下技巧返回实际的数组。 创build一个我们称之为eval_left
的命名公式。 确保在创build指定公式时select单元格C14
:
=EVALUATE(B14)
请注意,公式使用相对引用,所以如果您从C14
以外的单元中使用该名称,则会看到B14
已更改为左侧的任何单元格。
这使用旧的Excel 4macros函数EVALUATE
,它接受一个string并返回该string表示的值。 现在我们可以在单元格C14
一个最终的公式:
C14: =SUM(eval_left)
由于SUM
忽略非数字string,因此无需VBA即可获得所需的答案。 (但是,由于使用了EVALUATE
,您仍然会收到macros警告。)
就像我说的,我认为这是一个乐于助人的好奇心。 对于像这样的东西,你最好使用VBA。
编辑:
在不太可能发生的情况下,您希望实际执行此类操作,您将遇到EVALUATE
可以处理的长度限制。 你必须把你的更长的string分成less于65个值,不要使用“dummy”等,但它仍然是可行的。