如何在VBA中合并两个数组?

Kev*_*oyd 13 arrays vb6 merge vba

特定

Dim arr1 As Variant
Dim arr2 As Variant
Dim arr3 As Variant

arr1 = Array("A", 1, "B", 2)
arr2 = Array("C", 3, "D", 4)
Run Code Online (Sandbox Code Playgroud)

我可以对arr1和arr2执行什么操作,并将结果存储在arr3中,以便:

arr3 = ("A", "C", 1, 3, "B", "D", 2, 4)
Run Code Online (Sandbox Code Playgroud)

use*_*479 12

试试这个:

arr3 = Split(Join(arr1, ",") & "," & Join(arr2, ","), ",") 
Run Code Online (Sandbox Code Playgroud)


Joh*_*nFx 11

不幸的是,VB6中的Array类型没有那么多razzmatazz功能.您几乎必须遍历数组并手动将它们插入第三个数组

假设两个数组的长度相同

Dim arr1() As Variant
Dim arr2() As Variant
Dim arr3() As Variant

arr1() = Array("A", 1, "B", 2)
arr2() = Array("C", 3, "D", 4)

ReDim arr3(UBound(arr1) + UBound(arr2) + 1)

Dim i As Integer
For i = 0 To UBound(arr1)
    arr3(i * 2) = arr1(i)
    arr3(i * 2 + 1) = arr2(i)
Next i
Run Code Online (Sandbox Code Playgroud)

更新:修复了代码.对于以前的错误版本感到抱歉.花了几分钟时间访问VB6编译器来检查它.

  • 只是为了解释恼人的VBA阵列......特别是在组合Excel和VBA时,你需要知道的主要事情是数组可以有任意的下界.如果未指定一个,则LB由Option Base设置设置.但是使用Array()和ParamArrays创建的数组的LB总是为0.从Excel传递的数组的LB总是为1.迭代单个数组时没什么大不了的 - 使用For Each或LBound和UBound - 但是使用两个数组突然意味着你必须考虑边界和索引等细节...... (2认同)