【问题标题】:Efficient Excel formula for returning multiple matches from a large number of rows从大量行中返回多个匹配项的高效 Excel 公式
【发布时间】:2013-05-19 15:55:16
【问题描述】:

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

我已在以下位置上传了一个示例文件: Price List Sample

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

=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")}

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

非常感谢!

【问题讨论】:

  • 你需要一个真正的数据库。
  • 不,它必须是离线的并且只能基于 Excel。
  • 发布的公式与示例数据有何关系?它们包括示例中没有的范围和工作表!
  • 请查看更新文件Sample Data 2

标签: arrays excel large-data


【解决方案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 行测试了它,它会在

【讨论】:

  • 嘿克里斯!谢谢您的帮助;它运作良好。但我还有一个要求:如果我想在一个类别中显示所有产品而不考虑“评级”怎么办?大意是“_AT1_SPC_ALL”。再次感谢您的帮助!
  • 顺便说一句:无论如何我可以使用数据透视表来完成此任务吗?
猜你喜欢
  • 2021-10-20
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多