行中的VBA application.index Array()不起作用

时间:2017-03-08 12:48:02

标签: arrays excel vba

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

我目前有一个数组(4,11139),我试图拼接成两个独立的数组,一个包含前两行(2,11139),另一个包含第3 /第4行(2,11139)。各种搜索都表明这段代码是正确的方法,但它无法正常工作:(我已将代码浓缩为相关内容)

Dim Adjusted_Data_Array() As Single
Dim Final_Data_Array() As Variant
Dim Sys1_Data_Array() As Variant
Dim Sys2_Data_Array() As Variant
'Function that creates a 4,11139 variant array
Final_Data_Array = Strip_Erroneous(Adjusted_Data_Array, 1)
'Splice first two rows
Sys1_Data_Array = Application.Index(Final_Data_Array, Array(1, 2), 0)
'splice 3/4th rows
Sys2_Data_Array = Application.Index(Final_Data_Array, Array(3, 4), 0)

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

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

Screenshot of the watches from the 3 arrays discussed above.

我已经在列中使用了数组(1,2),但这也无效。

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

编辑: 尝试使用:

Sys1_Data_Array = Application.Index(Final_Data_Array, Application.Transpose(Array(1, 2)), 0)

根据下面的查尔斯建议,但结果是数组的简单切换索引如下所示:

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

Screenshot of watches from transpose(array(1,2) attempt

2 个答案:

答案 0 :(得分:1)

如果将ARRAY包装在TRANSPOSE

中,则可以使用INDEX方法
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 

答案 1 :(得分:0)

template <typename T>
std::pair<Element<T>*, Element<T>*> PAL<T>::find(std::string name)
{
    Element<T> *previous = nullptr;

    for (Element<T> *node = head_; node != nullptr; node = node->next_)
    {
        if (node->name_ == name)
            return std::make_pair(node, previous);

        previous = node;
    }

    return std::make_pair<Element<T>*>(nullptr, nullptr);
}