Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel vba-连接两个数组_Excel_Vba - Fatal编程技术网

Excel vba-连接两个数组

Excel vba-连接两个数组,excel,vba,Excel,Vba,我需要将两个阵列vd和vd1连接到vdu ReDim vdu(1 To (UBound(vd, 1) + UBound(vd1, 1)), 1 To 1) For i = 1 To UBound(vd, 1) vdu(i, 1) = vd(i, 1) Next i For j = i To UBound(vdu, 1) vdu(j, 1) = vd1(j - i + 1, 1) Next j 首先,我得到和“超出范围”错误 第二,最终我将有18个阵列需要加入,因此我不知道这是否

我需要将两个阵列vd和vd1连接到vdu

ReDim vdu(1 To (UBound(vd, 1) + UBound(vd1, 1)), 1 To 1)

For i = 1 To UBound(vd, 1)
   vdu(i, 1) = vd(i, 1)
Next i

For j = i To UBound(vdu, 1)
   vdu(j, 1) = vd1(j - i + 1, 1)
Next j
首先,我得到和“超出范围”错误

第二,最终我将有18个阵列需要加入,因此我不知道这是否是加入它们的最佳方案。

尝试使用

    ReDim vdu(LBound(vd) To UBound(vd) + UBound(vd1), 1 To 1)

    For i = LBound(vdu) To UBound(vdu)
        If i <= UBound(vd) Then
            vdu(i, 1) = vd(i, 1)
        Else
            vdu(i, 1) = vd1(i - UBound(vd), 1)
        End If
    Next i
您可以通过将数组存储在数组或字典中并通过该数组进行循环来完成此操作

其他选项

此方法使用参数数组。如果您不确定这是什么,请查找它,但实际上您可以向函数传递未指定数量的参数。因此,使用此函数,您可以组合任意数量的阵列(具有相同的形状和相同的基,即x到x,1到1),它将组合它们。打电话

arr = MergeArrays(vd, vd1, vd2,....,vd18)
试一试

    ReDim vdu(LBound(vd) To UBound(vd) + UBound(vd1), 1 To 1)

    For i = LBound(vdu) To UBound(vdu)
        If i <= UBound(vd) Then
            vdu(i, 1) = vd(i, 1)
        Else
            vdu(i, 1) = vd1(i - UBound(vd), 1)
        End If
    Next i
您可以通过将数组存储在数组或字典中并通过该数组进行循环来完成此操作

其他选项

此方法使用参数数组。如果您不确定这是什么,请查找它,但实际上您可以向函数传递未指定数量的参数。因此,使用此函数,您可以组合任意数量的阵列(具有相同的形状和相同的基,即x到x,1到1),它将组合它们。打电话

arr = MergeArrays(vd, vd1, vd2,....,vd18)

getMasterArray
将返回一个数组,该数组将最多60个不同的2d数组组合成一个数组
getMasterArray
还提供了返回0或基于0的数组的选项

子测试GetMasterArray()
模糊数据
数据=getMasterArray(假,范围(“列表1”)。值,范围(“列表2”)。值,范围(“列表3”)。值,范围(“列表4”)。值)
工作表(“结果”)。范围(“A1”)。调整大小(UBound(数据),UBound(数据,2))。值=数据
端接头
函数getMasterArray(Base0为布尔值,ParamArray()为变量)
变暗结果作为变量,v作为变量
长度为Dim Count,长度为Count2,下限为Integer,lOffset为Integer,x为Long,x1为Long,y为Long
对于阵列中的每个v
计数=Count+UBound(v)+IIf(LBound(v)=0,1,0)
y=UBound(v,2)+IIf(LBound(v,2)=0,1,0)
如果y>Count2,则Count2=y
下一个
下限=IIf(基准0,0,1)
重拨结果(低绑定到计数,低绑定到计数2)
对于阵列中的每个v
如果LBound(v,2)>LBound(result,2),则
lOffset=-1
ElseIf LBound(v,2)

由getMasterArray生成的示例数据将返回一个数组,该数组最多可将60个不同的2d数组组合成一个数组
getMasterArray
还提供了返回0或基于0的数组的选项

子测试GetMasterArray()
模糊数据
数据=getMasterArray(假,范围(“列表1”)。值,范围(“列表2”)。值,范围(“列表3”)。值,范围(“列表4”)。值)
工作表(“结果”)。范围(“A1”)。调整大小(UBound(数据),UBound(数据,2))。值=数据
端接头
函数getMasterArray(Base0为布尔值,ParamArray()为变量)
变暗结果作为变量,v作为变量
长度为Dim Count,长度为Count2,下限为Integer,lOffset为Integer,x为Long,x1为Long,y为Long
对于阵列中的每个v
计数=Count+UBound(v)+IIf(LBound(v)=0,1,0)
y=UBound(v,2)+IIf(LBound(v,2)=0,1,0)
如果y>Count2,则Count2=y
下一个
下限=IIf(基准0,0,1)
重拨结果(低绑定到计数,低绑定到计数2)
对于阵列中的每个v
如果LBound(v,2)>LBound(result,2),则
lOffset=-1
ElseIf LBound(v,2)

生成的样本数据能否将18个数组存储在一个数组中?哪一行的
超出范围
错误?阵列也是1D还是2D?能否将18个阵列存储在阵列阵列中?哪一行出现
超出范围的错误?阵列也是1D还是2D?是的,这很有效。谢谢你觉得第二个问题怎么样,这取决于数组是什么。它们都是一样的形状吗?你是以2的形式加入它们,这样你就可以得到9个数组,还是你的意思是你将加入所有18个数组?是的,相同的形状,我将把18个数组加入1个数组。也许,“最好”的方法是在前两个数组的基础上加上第三个数组,依此类推。是的,太棒了!谢谢!是的,这个有效。谢谢你觉得第二个问题怎么样,这取决于数组是什么。它们都是一样的形状吗?你是以2的形式加入它们,这样你就可以得到9个数组,还是你的意思是你将加入所有18个数组?是的,相同的形状,我将把18个数组加入1个数组。也许,“最好”的方法是在前两个数组的基础上加上第三个数组,依此类推。是的,太棒了!谢谢!
arr = MergeArrays(vd, vd1, vd2,....,vd18)
Sub TestgetMasterArray()
    Dim data
    data = getMasterArray(False, Range("List1").Value, Range("List2").Value, Range("List3").Value, Range("List4").Value)
    Worksheets("Result").Range("A1").Resize(UBound(data), UBound(data, 2)).Value = data
End Sub

Function getMasterArray(Base0 As Boolean, ParamArray Arrays() As Variant)
    Dim result As Variant, v As Variant
    Dim Count As Long, Count2 As Long, lowBound As Integer, lOffset As Integer, x As Long, x1 As Long, y As Long

    For Each v In Arrays
        Count = Count + UBound(v) + IIf(LBound(v) = 0, 1, 0)
        y = UBound(v, 2) + IIf(LBound(v, 2) = 0, 1, 0)
        If y > Count2 Then Count2 = y
    Next

    lowBound = IIf(Base0, 0, 1)
    ReDim result(lowBound To Count, lowBound To Count2)

    For Each v In Arrays
        If LBound(v, 2) > LBound(result, 2) Then
            lOffset = -1
        ElseIf LBound(v, 2) < LBound(result, 2) Then
            lOffset = 1
        End If

        For x = LBound(v) To UBound(v)
            For y = LBound(v, 2) To UBound(v, 2)
                result(lowBound, y + lOffset) = v(x, y)
            Next
            lowBound = lowBound + 1
        Next
    Next
    getMasterArray = result
End Function