我正在开展一个项目,需要从大量数据中抽取数据并进行排序。为了保持工作簿的效率,数据被保存在 SPILL 集合中,因为抽取原始选定范围用于工作表的效率太低了。工作簿中有多个工作表集合,其设计旨在通过复制工作表模板轻松添加更多工作表。
我不会过多地介绍细节,但重点是保持事情简单,有大量的工作表有各自的表格,这些工作表上有过滤器来修剪和 SPILL 表格数据。由于所有单独的工作表都基于模板,因此工作表的数据 SPILL 的位置是相同的,并且可以从主工作表中全局提取。
当主表尝试提取所有数据时,就会出现问题。我能够创建的唯一设置是使用 TEXTJOIN 和 CONCATENATE 来创建动态公式并添加更多表,计划是将动态名称列表放入 VSTACK,然后在公式上使用 INDIRECT,这会将所有表中的所有数据溢出到一个庞大(但高效)的 SPILL 中。问题是,令我沮丧的是,INDIRECT 和 VSTACK 彼此不喜欢。
我对这个问题进行了大量的研究,我发现的所有解决方案都不适合我的特定设置,特别是 SPILLS。我也尝试过 3D 引用,但同样的问题也出现了,而 3D 引用通常可以解决这个问题,这意味着这是 SPILL 的问题。所以我现在在这里寻求任何想法、建议的解决方案或新的公式/VBA 代码来使其工作/运行良好。理想情况下,可以使用自定义公式替代 VSTACK 或 INDIRECT 来解决它们之间的问题。
该问题的示例代码是 VSTACK(Sheet1!A1#,Sheet2!A1#,Sheet3!A1#,ect.),后跟另一个单元格中的 =INDIRECT,该单元格引用包含此文本的单元格。
编辑:以下图片可以更清晰地显示该问题:
答案1
这个问题提得太笼统了。请给出不起作用的公式的具体例子。
如果你有D1
:
=VSTACK(Sheet1!A1#,Sheet2!A1#,Sheet3!A1#)
这有效:
=INDIRECT("D1#")
INDIRECT
函数需要文本手机地址作为参数。如果您想使用公式的文本作为参数来计算公式,则应使用Evaluate
VBA 中的方法或EVALUATE
XLM 宏中的旧函数。幸运的是,现在您可以将此函数与 结合起来,LAMBDA
这样使用起来就方便多了。
为此,您应该LAMBDA
在名称管理器中定义,例如eval
:
=LAMBDA(x,IF(RAND(),EVALUATE(x)))
这RAND
对于使公式具有易变性是必要的。
然后您可以在工作表中使用它:
=eval(address)
其中address
(不带引号) 指的是包含公式文本的单元格。
由于使用EVALUATE
函数,工作簿应保存为 .xlsm 格式。