3

我有一大堆包含任意长度数组的单元格,这些数组存储为以分号分隔的字符串,长度范围从 1 到 65 个条目,例如:

  • pcmsh15(232);pcmsh16(232);pcmsh17(136);
  • pcmsh12(40);
  • pcmsh12(40);
  • pcmsh12(5);pcmsh15(20);

我想要一种方法来总结 Excel 2010 中括号中的数字而不使用 VBA,请记住它们是任意长度的字符串,每个字符串都包含在自己的单元格中。

我目前有一个我编写的 VBA 函数,它对括号中的数字求和,但它减慢了我的电子表格的速度。我知道我可以使用 Excel 的 SUBSTITUTE 函数将分号分隔的数组转换为类似于 Excel 内部数组格式的东西,例如

="{"&SUBSTITUTE([@[data]],";",",")&"}"

但不幸的是,Excel 不会将其解析为 SUM 或 COUNTIF 中的数组,而只会解析为字符串。我发现的一种解决方法是创建一个命名范围,该范围使用字符串格式的数组引用单元格,但是由于单元格中也有任意数量的这些数组,所以我不能命名每个单元格。

在“纯”excel函数中是否有可能发生这样的事情?

4

1 回答 1

2

您实际上可以在不涉及 VBA 的情况下执行此操作。不过,这个方法有点荒谬。但是,只是为了好玩...

在单元格B4中,我放置了您要“解析”的字符串之一:

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 数组的文本表示:

B14: {"dummy15";232;"dummy16";232;"dummy17";136}

您可以使用以下技巧让 Excel 评估该字符串并返回一个实际数组。创建一个我们将调用的命名公式eval_left。确保C14在创建命名公式时选择了单元格:

=EVALUATE(B14)

请注意,该公式使用相对引用,因此如果您在除 之外的单元格中使用该名称C14,您将看到B14已更改为左侧的任何单元格。

这使用旧的 Excel 4 宏函数EVALUATE,它接受一个字符串并返回该字符串表示的值。现在我们可以在单元格中输入最终公式C14

C14: =SUM(eval_left)

由于SUM忽略了非数字字符串,因此您无需 VBA 即可获得所需的答案。(不过,由于使用了 .,您仍然会收到宏警告EVALUATE。)

就像我说的,我认为这只是为了好玩。你最好使用 VBA 来处理这样的事情。

编辑:

万一你想实际做这样的事情,你会遇到EVALUATE可以处理的长度限制。您必须将较长的字符串切成少于 65 个值,而不是使用“虚拟”等,但它仍然是可行的。

于 2011-07-05T19:41:34.020 回答