Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 无法使用Union将范围合并到VBA中的数组中_Arrays_Excel_Vba - Fatal编程技术网

Arrays 无法使用Union将范围合并到VBA中的数组中

Arrays 无法使用Union将范围合并到VBA中的数组中,arrays,excel,vba,Arrays,Excel,Vba,我有两个要加入的命名范围,即将第二个范围附加到数组中第一个范围的末尾。当我使用Union时,我只得到数组中的第一个范围。如果我只使用范围,它可以工作,但我不能加入非连续范围 Sub GetAbilities() Dim Arr() As Variant Dim rng1 As Range Dim rng2 As Range Dim newRng As Range Set rng1 = tbl.ListColumns("Ability1").DataBodyRange Set rng2 =

我有两个要加入的命名范围,即将第二个范围附加到数组中第一个范围的末尾。当我使用Union时,我只得到数组中的第一个范围。如果我只使用范围,它可以工作,但我不能加入非连续范围

Sub GetAbilities()
Dim Arr() As Variant   
Dim rng1 As Range
Dim rng2 As Range
Dim newRng As Range

Set rng1 = tbl.ListColumns("Ability1").DataBodyRange
Set rng2 = tbl.ListColumns("Ability2").DataBodyRange
Set newRng = Union(rng1, rng2)

'   Set newRng = Range(rng1, rng2)
'   This works fine

Arr = newRng

Dim Destination As Range
Set Destination = Sheets("test").Range("A1")
Destination.Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr

End Sub

您只是将两列堆叠在彼此的顶部,我认为这样您可以按如下方式循环:

Option Explicit

Sub Test()

    Dim Arr() As Variant
    Dim tbl As ListObject

    Set tbl = ThisWorkbook.Worksheets("Sheet4").ListObjects("Table1") 'this would be set as per your requirements
    Dim totalOutputRows As Long
    Dim totalColumnRows As Long

    totalColumnRows = tbl.DataBodyRange.Rows.Count
    totalOutputRows = totalColumnRows * 2

    ReDim Arr(1 To totalOutputRows)
    Dim i As Long
    Dim j As Long

    For i = 1 To totalOutputRows

        If i <= totalColumnRows Then

            Arr(i) = tbl.ListColumns("Ability1").DataBodyRange(i, 1)

        Else

            j = j + 1
            Arr(i) = tbl.ListColumns("Ability2").DataBodyRange(j, 1)

        End If

    Next i

End Sub

您需要将每个newRng.Area分别添加到阵列中。你不能一步将一个不相连的区域加载到数组中。谢谢,我本来希望避免循环,但看起来这样就可以了。你可以不用循环,但对于较大的数据集来说,这可能有点低效。例如,阵列3=拆分JoinArray1,&和Joinarray2,,
Arr(i) = tbl.ListColumns("Ability2").DataBodyRange(i - totalColumnRows, 1)