我正在开展一个项目,该项目将把大量溢出的数据提取到大量工作表中,这些数据都位于同一位置,因为这些工作表均基于模板。
使用名称管理器,我能够创建一个函数来评估自动形成的文本连接,以使用来自所有工作表的溢出数据创建 VSTACK 公式。
从此文本连接中复制/粘贴文本并正常计算时,一切正常,这意味着计算没有问题。但是有这么多不同的变量导致 =Eval(我的名称管理器公式 =EVALUATE(x))不起作用。经过调查,我发现名称管理器公式的字符限制约为 250,因此我使用此代码创建了一个 UDF 公式。
Public Function eval(ByVal str As String) As Variant
eval = Application.Evaluate(str)
End Function
尽管 UDF 应该最多计算约 8000 个字符,但它仍然无法计算我的文本连接(约 4000 个字符)。有没有办法让它工作,或者有一个可以处理更多字符的评估版本?VBA 解决方案绝对可行,请告诉我。
试图评估的文本示例:
=VSTACK(Sheet1!A1#:Sheet1!G1#, Sheet2!A1#:Sheet2!G1#, Sheet3!A1#:Sheet3!G1#,等…)
此外,我做了大量的实验,但出于某种原因,excel 不允许我执行 =VSTACK(Sheet95:Sheet100!A1#:G1#) 之类的操作。任何关于原因的反馈都非常好,因为这将是我面临的问题的一个更简单的解决方案。
答案1
你可以尝试这个方法:
=REDUCE(EXPAND("",1,7,""),{"Sheet1";"Sheet2";"Sheet3"},LAMBDA(a,b,VSTACK(a,INDIRECT(b&"!A1#"):INDIRECT(b&"!G1#"))))
可以单独准备工作表列表并将其作为名称传递。
您还可以在工作表中创建列表并将其引用为单元格范围,例如E5:E7
或E5:G5
,或者E5#
如果它是动态范围。您还可以调用 UDF 函数,该函数返回工作表名称列表MyList()
。
初始行现在是空的,但您可以在其中放置一些标题。
这里不接受 3D 符号,因为它必须是这样的:
=VSTACK((Sheet95:Sheet100!A1#):(Sheet95:Sheet100!G1#))
而在 3D 范围上进行这样的操作是不可能的。