0

我被一个重大问题难住了。我有一个由大约 16000 行组成的数据集(将来可能会更多)。该清单基本上是包含产品及其相应安装费用的价目表。现在产品按以下层次分类:城市 -> 类别 -> 评级/类型。在我使用命名范围通过连接城市、类别和评级 (_XYZ_SPC_9.5) 来引用每个集合之前。这导致大约 1500 个命名范围扩大了 Excel 文件的大小。所以我决定使用用户的输入即时计算产品。我尝试过数组公式和简单公式,但它们需要一些时间来计算(16000 行!!),从可用性的角度来看这是不可接受的;我们的销售人员非常注重他们必须在工具上花费多少时间。

我已在以下位置上传了一个示例文件: 价目表示例

到目前为止我使用的公式是:

=IFERROR(INDEX($H$6:$H$15000, SMALL(INDEX(($AE$9=$R$6:$R$15000)*(MATCH(ROW($R$6:$R$15000), ROW($R$6:$R$15000)))+($AE$9<>$R$6:$R$15000)*15000, 0, 0), AC3)),"Not Available")

{=IFERROR(INDEX(ref_PRICE_LIST!$H$6:$H$16074,MATCH(INDEX(ref_PRICE_LIST!$H$6:$H$16074,(SMALL(IF(IF(RIGHT($AE$3,3)="All",ref_PRICE_LIST!$Z$6:$Z$16074,ref_PRICE_LIST!$R$6:$R$16074)=$AE$3,ROW(ref_PRICE_LIST!$H$6:$H$16074)-ROW(ref_PRICE_LIST!$H$6)+1),$AC3))),ref_PRICE_LIST!$H$6:$H$16074,0),1),"Not Available")}

如果有人可以帮助我,我将不胜感激。

太感谢了!

4

1 回答 1

1

我认为加快速度的最佳方法是将公式拆分为辅助列K和结果列L

辅助列(向下复制所有 16,000 个数据行)

=IF($D:$D=$O$2,ROW(),"")

结果列(从 开始L2,根据需要向下复制)

=IFERROR(INDEX($F:$F,SMALL($K:$K,ROW()-1)),"Not available")

我已经用大约 150,000 行测试了它,它在 < 1 秒内更新

于 2013-05-24T07:26:21.953 回答