Arrays 通过Evaluate直接检索一维值数组

Arrays 通过Evaluate直接检索一维值数组,arrays,excel,vba,Arrays,Excel,Vba,背景: 在我的问题中,我设置了如何检索数组中的一系列工作表,以便循环遍历它们 我想更进一步,取而代之的是检索一个值数组,例如:{“Val1”、“Val2”、“Val3”} 代码: 要使用以下代码,您可以复制我试图通过创建一组名为“Sheet1”、“Sheet2”等的工作表来实现的功能。然后输入一个模块: Sub Test Dim lwr As Long: lwr = 2 Dim uppr As Long: uppr = 5 'Options will follow here * End s

背景:

在我的问题中,我设置了如何检索数组中的一系列工作表,以便循环遍历它们

我想更进一步,取而代之的是检索一个值数组,例如:
{“Val1”、“Val2”、“Val3”}

代码:

要使用以下代码,您可以复制我试图通过创建一组名为“Sheet1”、“Sheet2”等的工作表来实现的功能。然后输入一个模块:

Sub Test

Dim lwr As Long: lwr = 2
Dim uppr As Long: uppr = 5

'Options will follow here *

End sub
这就是如何使用动态行变量检索工作表数组。您将看到它将拉取一个我们可以在中使用的SheetName数组,例如:
,用于此工作簿中的每个ws。Sheets(shts)

不过,现在我想直接从这些表中获取一个值数组。这是我检索感兴趣的单元格(所有工作表中的同一单元格)的方式,例如
A1

Dim shts As Variant: shts = Application.Evaluate("TRANSPOSE(""Sheet""&ROW(" & lwr & ":" & uppr & ")&""!A1"")")
单元格引用是毫无意义的,但其中一个例子是,当所有值都是数字时,我希望能够这样求和:

Debug.Print Application.Evaluate("SUM(" & Join(shts, ",") & ")")
但是,我希望将它们直接拉入数组变量(无需通过表单循环),无论是数字还是非数字,例如:
{5,3,“Val1”,6}

问题:

我尝试了几种方法,包括
间接
,甚至
地址
,首先将范围放入命名范围。所有的尝试都是徒劳的,因为这些函数似乎都不适用于数组。例如:

Dim vals As Variant: vals = Application.Evaluate("TRANSPOSE(INDIRECT(""Sheet""&ROW(" & lwr & ":" & uppr & ")&""!A1""))")
将抛出一个包含一系列错误的数组,因为问题很可能在于非连续范围

问题:


有没有办法直接通过求值成功地检索一维数组?或者我正在寻找的是不可能的,在这种情况下,这会让我回到一个循环来获取我的数组。

最终使用
中的
选择
。评估
为我做了:

Dim lwr As Long: lwr = 2
Dim uppr As Long: uppr = 5

Dim shts As Variant: shts = Application.Evaluate("TRANSPOSE(""Sheet""&ROW(" & lwr & ":" & uppr & ")&""!A1"")")
Dim vals As Variant: vals = Application.Evaluate("TRANSPOSE(CHOOSE(ROW(1:" & uppr - lwr + 1 & ")," & Join(shts, ",") & "))")
我在这里所做的:

  • 获取下限>
    lwr
  • 获取上限>
    uppr
  • 通过
    获取范围数组。使用这些边界计算
  • 通过
    中上一个数组的
    联接
    来获取一个值数组。使用
    选择
    来评估
例如,如果
Sheet2!A1
=
4
第三张!A1
=
5
第4页!A1
=
1
第5页!A1
=
测试

然后,上述代码将为
VAL
返回以下内容:


如您所见,它包含一个具有变量值的一维数组。正是我想要的。我现在可以一次从不同的表中提取值,得到一个动态数组。

这可能一点帮助都没有,但您考虑过索引吗?我之所以提到这一点,是因为我有这个想法@Sjr感谢这个链接,我也一直在修改索引,尽管到目前为止还没有成功。很明显,当我找到东西时,我会通知你的。干得好,不知道是什么让你做出选择。下一步-非连续图纸、不同单元格?是的,下一步是非连续工作表,这实际上是一个智力练习@SJR,我总是告诉人们使用数组,所以我想知道如何才能快速获得数组,我想不起来以前见过类似的情况。总有一个循环。所以我从动态表数组开始,然后是这个<代码>选择
是在我考虑哪些函数将占用非连续单元格时出现的。现在转到非连续工作表…=)。谢谢
Dim lwr As Long: lwr = 2
Dim uppr As Long: uppr = 5

Dim shts As Variant: shts = Application.Evaluate("TRANSPOSE(""Sheet""&ROW(" & lwr & ":" & uppr & ")&""!A1"")")
Dim vals As Variant: vals = Application.Evaluate("TRANSPOSE(CHOOSE(ROW(1:" & uppr - lwr + 1 & ")," & Join(shts, ",") & "))")