在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”等,但它仍然是可行的。