我正在建立一个宏来获取一个部门需要的产品列表(他们每天发送一个新的产品),并根据仓库中每个项目的每个位置的报告引用它。到目前为止,我已将其设置为计算产品ID在位置列表(x)中出现的次数,并将其复制到新工作表x多次。现在我需要它来获取产品的大小并填充另一列,以便我可以索引Product ID&大小,找到位置。该表将被打印并提供给人们拉动产品,而无需他们查看系统并找到列表中所有内容的位置(目前大约需要一个小时。)
现在的问题是,我无法在不破坏第二个唯一值的第一个实例的情况下自动填充公式。我找到了一个解决方法,但我不知道如何开始在vba中自动化它。
D2中的数组公式=
{=INDEX(Report!D:G,SMALL(IF(Report!D:G=$A2,ROW(Report!D:G)),ROW(A1)),4)}
当它下降到A列中的第二个唯一值时,它会断开并显示为
{=INDEX(Report!D:G,SMALL(IF(Report!D:G=$A7,ROW(Report!D:G)),ROW(A6)),4)}
但是通过将最后一个ROW函数更改回A1,它可以正常工作:
{=INDEX(Report!D:G,SMALL(IF(Report!D:G=$A7,ROW(Report!D:G)),ROW(A1)),4)}
Formula breaks in first instance of 2nd unique value in Column A
我尝试在公式中添加IFERROR:
{=IFERROR(INDEX(Report!D:G,SMALL(IF(Report!D:G=$A2,ROW(Report!D:G)),ROW(A1)),4),INDEX(Report!D:G,SMALL(IF(Report!D:G=$A2,ROW(Report!D:G)),ROW($A$1)),4))}
但显然这没效果。更令人绝望的是。
有没有办法通过检测A列中的更改并仅将公式中的最后一个ROW函数还原为A1来自动化VBA中的过程?
或者,是否有通过自动填充工作的公式?
感谢任何帮助。谢谢!
答案 0 :(得分:0)
试试这个数组公式:
=INDEX(Report!G:G,SMALL(IF(Report!D:D=$A2,ROW(Report!D:D)),COUNTIF($A$2:A2,A2)))
作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,Excel会将{}
放在公式周围。
注意: 我已经留下了完整的列引用,这在使用数组公式时很糟糕,因为它们将迭代遍历每个单元格,无论它是否具有值或不。这将超过一百万计算PER公式。这会减慢您的计算时间,甚至可能会崩溃。
建议您仅引用那些包含数据的单元格。
处理数据的一种方法是在小变量内部进行引用。我们可以用INDEX / MATCH做到这一点:
=INDEX(Report!G:G,SMALL(IF(Report!D$1:INDEX(Report!D:D,MATCH(1E+99,Report!D:D))=$A2,ROW(Report!D$1:INDEX(Report!D:D,MATCH(1E+99,Report!D:D)))),COUNTIF($A$2:A2,A2)))
现在,公式将自动将引用的结尾设置为报表单的D列中的最后一个单元格,并且不会产生额外的非必要循环。