我正在尝试在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个数组,每个数组包含第一个数组的一半数据。但是我在新数组中获得的是一个包含两行的一维数组。像这样:
我已经在列中使用了数组(1,2),但这也无效。
我可以通过简单地分成4个单独的一维数组来解决这方面的问题(工作正常,它是似乎没有的数组(1,2)或数组(3,4)。但我知道在未来的工作中,我将需要拼接更大的阵列,以便了解为什么它没有为此做好准备。 非常感谢。
编辑: 尝试使用:
Sys1_Data_Array = Application.Index(Final_Data_Array, Application.Transpose(Array(1, 2)), 0)
根据下面的查尔斯建议,但结果是数组的简单切换索引如下所示:
答案 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);
}