简化并制作更高效的 Excel 公式
Posted
技术标签:
【中文标题】简化并制作更高效的 Excel 公式【英文标题】:Simplifiy and make an more efficient Excel Formula 【发布时间】:2021-03-19 01:23:16 【问题描述】:为了适应大量数据,我一直在不断增加公式的复杂性。我一直在尝试简化这个 excel 公式,但似乎找不到一种行之有效的方法。我会很感激任何建议!
=IFERROR(IF(INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),4)="Complete",INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2),IF(VLOOKUP([@SN],FullSNList_2,8,FALSE)="None",IF(ISNUMBER(MATCH(SUBSTITUTE(TRIM(M4),"`",""),TRIM($L4:L4),0)),INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2)&"` ",INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2)&" "),IF(OR(VLOOKUP([@SN],FullSNList_2,8,FALSE)="Dev",VLOOKUP([@SN],FullSNList_2,8,FALSE)="ECO",VLOOKUP([@SN],FullSNList_2,8,FALSE)="Rework"),IF(ISNUMBER(MATCH(SUBSTITUTE(TRIM(M4),"`",""),TRIM($L4:L4),0)),INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2)&"` ",INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2)&" "),IF(ISNUMBER(MATCH(SUBSTITUTE(TRIM(M4),"`",""),TRIM($L4:L4),0)),INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2)&"` ",INDEX(FullFlow_2,SMALL(IF(FullFlow_2[SN]=[@SN],ROW(FullFlow_2[SN])-ROW(INDEX(FullFlow_2[SN],1,1))+1),COLUMN(M$2)-COLUMN($L$2)),2)&" ")))),"_")
关于代码的更多信息。它旨在扫描表并搜索步骤名称(DOC###)。根据其他标准(如果其中一列没有、返工或损坏),空格被添加到末尾以区分它们,同时仍然能够在以后的步骤中计算。此外,如果一个步骤是第 2 次执行,之后将添加一个句点。
我已将公式放入 http://excelformulabeautifier.com/ 以帮助阅读更轻松!
更新:我稍微修改了公式并添加了解释。新代码已替换正文中的旧代码。我附上了图片来说明我的解释。
Formula Explanation PG 1
Formula Explanation PG 2
Example Data output
注意:为了让这对我有用,由于循环引用,我打开了迭代计算并将最大迭代次数设置为 2。
【问题讨论】:
我不敢相信这是人工编写的代码!这太疯狂了 :) - 我建议你先弄清楚它的作用,然后从头开始重写它,甚至使用 VBA。 请注意您已经提到了为什么要更改公式。当然,维护起来并不容易。此外,请注意某些表达式被大量重复,从而使公式更易于阅读,为了阅读目的,请替换以下表达式:ROW(INDEX(FullFlow_2[SN] with may XX, then for ROW(FullFlow_2[SN])- XX,1,1))+1) 可能还有 YY 等。下一步是缩进 IF 语句。然后试着去理解它。 如果您弄清楚它应该做什么,您可以通过使用样本数据和预期输出制作样本来丰富您的问题。一个简化的例子肯定会产生有用的答案。 @NoChance 关于人造。我有几个这样大小的公式。通常它们是由辅助列创建的,然后通过删除 C2 并将其设置为 C2 中的公式等方式,将它们合并为一个。 我会保留“帮助列”:如果您有错误,它们将使故障排除变得更加容易。 Excel 中的“房地产”非常丰富,您可以随时隐藏列或行以使其不碍事。另外,如果你离开这张纸,并在 6 个月后回来,你会知道发生了什么吗? 【参考方案1】:从公式中删除 VLookups 使计算时间缩短了很多!谢谢大家的想法!非常感谢任何其他建议!
【讨论】:
以上是关于简化并制作更高效的 Excel 公式的主要内容,如果未能解决你的问题,请参考以下文章