Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 行中的VBA application.index Array()不';行不通_Arrays_Excel_Vba - Fatal编程技术网

Arrays 行中的VBA application.index Array()不';行不通

Arrays 行中的VBA application.index Array()不';行不通,arrays,excel,vba,Arrays,Excel,Vba,我正在尝试使用excel VBA中的Application.Index函数 我目前有一个数组(411139),我正试图将其拼接成两个单独的数组,一个包含前两行(211139),另一个包含第三行/第四行(211139)。各种搜索表明此代码是正确的方法,但它不能正常工作:(我已将代码压缩为相关内容) 现在我应该有两个数组,每个数组包含第一个数组的一半数据。但是我在新数组中得到的是一个有两行的一维数组。像这样: 上面讨论的3个阵列的手表屏幕截图。 我试过使用列中的数组(1,2),但也不起作用 我可以

我正在尝试使用excel VBA中的Application.Index函数

我目前有一个数组(411139),我正试图将其拼接成两个单独的数组,一个包含前两行(211139),另一个包含第三行/第四行(211139)。各种搜索表明此代码是正确的方法,但它不能正常工作:(我已将代码压缩为相关内容)

现在我应该有两个数组,每个数组包含第一个数组的一半数据。但是我在新数组中得到的是一个有两行的一维数组。像这样:

上面讨论的3个阵列的手表屏幕截图。

我试过使用列中的数组(1,2),但也不起作用

我可以通过简单地拆分成4个独立的一维数组来解决这方面的问题(这很好,数组(1,2)或数组(3,4)似乎没有。但我知道在未来的工作中,我需要拼接更大的数组,所以我想了解为什么它没有做好准备。 非常感谢

编辑: 尝试使用:

Sys1_Data_Array = Application.Index(Final_Data_Array, Application.Transpose(Array(1, 2)), 0)
根据下面的charles建议,但最终会得到数组的简单切换索引,如图所示:

转置(数组(1,2)尝试的手表截图

如果将数组包装在转置中,则可以使用索引方法

var1 = Application.Index(varData, Application.Transpose(Array(1, 2)), 0)
var2 = Application.Index(varData, Application.Transpose(Array(3, 4)), 0)

抱歉:实际上这不起作用!

但它比使用VBA复制阵列的相关部分慢2.5倍左右。

For k = 1 To UBound(varData, 2)
    For j = 1 To 2
        var1(j, k) = varData(j, k)
        var2(j, k) = varData(j + 2, k)
    Next 
Next 

我不相信
INDEX
函数可以接受数组作为
row_num
column_num
的参数。如果其中一个为零,那么另一个必须指向单个行/列。多亏了Ron,我开始想知道,我不知道如何解释这一点:然后,还有更多的例子指示其他人以这种形式使用它。在注释中,有许多用户在使用
行数
的数组参数时无法使用本文中的示例。另外请注意,如果使用完全限定的
应用程序.worksheetfunction.index…
,则在使用
Ar时,会出现类型不匹配射线(1,2)
参数。在任何情况下,使用VBA数组循环(只需要一次复制操作)可能更有效,而不是将数组的副本传递给索引,然后将子集副本传递回索引。作为补充说明,最有效的方法是根本不复制数组,只使用原始数组中的值。索引不能用于返回多行/列AFAIKThanks Charles,但仍然无法正常工作。我现在有一个2,1数组,而不是以前的1,2数组。编辑上面的原始帖子以显示它。看起来我正在编写一个带有循环的函数来实现它,因此我的代码保持整洁。
For k = 1 To UBound(varData, 2)
    For j = 1 To 2
        var1(j, k) = varData(j, k)
        var2(j, k) = varData(j + 2, k)
    Next 
Next 
TheAddress = "row(1:2)"
TheRows = Application.Evaluate(TheAddress) 'must be a 2 dimensions array 
TheColumns = Array(1, 2, 3)'must be a 1 dimension array 
Sys1_Data_Array = Application.Index(Final_Data_Array, TheRows, TheColumns) 
Cells(9, 1).Resize(UBound(Sys1_Data_Array), UBound(Sys1_Data_Array, 2)) = Sys1_Data_Array