问题:在以下情况下,是否有比当前使用的方法更有效的电子表格公式来计算子字符串?还是仅仅是因为数据量太庞大而无法在处理速度上产生有价值的变化?
上下文:我们使用Google电子表格来记录有关商品的信息;每个项目在工作表中分配一行。我们主要标签中的E列用于记录这些项目的标准化标题(以分号分隔),从E3开始。
例如,E3看起来像:
Abraham Lincoln Bicentennial Commission; Abraham Lincoln Bicentennial Exhibition; Library of Congress; Lincoln, Abraham, 1809-1865
电子表格中的5个标签用于保存我们商品的此类列表;这些选项卡分别标记为“记录1的元数据”到“记录5的元数据”。预计到项目完成时,每个选项卡将包含大约2500行项目信息。
称为“主题标题”的单独选项卡列出了标准化的标题,每个标题都位于A列(以A2开头)中自己的行中。存在数千个标题。标题可能包含标点符号和其他数字,例如“:”,“()”和“?”,因为它们是诸如
Erōs
或
Olympic Games (23rd : 1984 : Los Angeles, Calif.)
或
Thomas, Aquinas, Saint, 1225?-1274
G列旨在(按行)列出A列中每个标题的出现情况。
问题:每次更改E列中的单元格时(通过添加,删除或编辑内容),工作表都会重新计算。但是,由于标题和项目行的数量(跨5个选项卡),计算出现次数需要一些时间(当前,在最后一次Column E编辑之后,大约5,500行大约需要5分钟)。因此,如果可能的话,我们需要一个更有效的计数公式来保持同步。
过去的困难/复杂之处在于,某些公式的计数不正确,因为它们不够精确(因此获取了太多可能的结果),在单元格中发现一个出现后停止计数等。
公式中的复杂性避免了这些问题,但几乎可以肯定地增加了处理时间。
工作公式的最简单形式:
=SUMPRODUCT(TRIM($A2)=TRIM(SPLIT('Metadata for Records'!E$3:INDEX('Metadata for Records'!E$3:E, CountA('Metadata for Records'!E$3:E)),";")))
这会在一个选项卡(这里称为“记录元数据”)中计算标题。
工作公式的合同形式:
=SUM(SUMPRODUCT(TRIM($A2)=TRIM(SPLIT('Metadata for Records 1'!E$3:INDEX('Metadata for Records 1'!E$3:E, CountA('Metadata for Records 1'!E$3:E)),";"))),SUMPRODUCT(TRIM($A2)=TRIM(SPLIT('Metadata for Records 2'!E$3:INDEX('Metadata for Records 2'!E$3:E, CountA('Metadata for Records 2'!E$3:E)),";"))))
这通过组合每个选项卡的总出现次数来计数2个选项卡(“记录1的元数据”和“记录2的元数据”)中的标题。我们日常使用中的实际公式会汇总所有5个元数据标签。
理想解决方案:最有用的公式是:
鉴于所有这些,是否有可能改进?我欢迎别人有任何想法!