Excel VBA中的数组元素到数组元素复制

时间:2014-08-19 13:27:48

标签: excel-vba vba excel

我是Excel VBA的新手,我来自SAS编程背景,这意味着我没有使用大量数组,因此几乎没有任何经验。所以请原谅我,如果我得到任何错误的术语。

我有2个动态数组,想要根据这两个数据创建第3个数组,它们每个都有相同的元素数,并且都是1维。 Array1将填充所有元素 - 但是Array2将填充一些元素,但现在大多数都是空白的。每当Array2填充一个元素时,它将替换Array1上Array3的任何元素编号。

我为我正在寻找的内容制作了一个可视化截图。

PIC

任何帮助或可能的功能,我可以更多地了解它会有所帮助!

2 个答案:

答案 0 :(得分:0)

所以你想要这个:

P1 - > P2

我使用了这段代码:

Public Sub ProcessArrays()

    Dim x1() As Variant, x2() As Variant, x3() As Variant
    Dim i As Integer, N As Integer
    ' Count non-empty cells
    N = CountRows(Range("A2"))
    ' Read array1 and array2
    x1 = Range("A2").Resize(N, 1).Value
    x2 = Range("B2").Resize(N, 1).Value
    ' Declare array3
    ReDim x3(1 To N, 1 To 1)

    'Process arrays
    For i = 1 To N
        If Not IsEmpty(x2(i, 1)) Then
            x3(i, 1) = x2(i, 1)
        Else
            x3(i, 1) = x1(i, 1)
        End If
    Next i

    'Output array 3
    Range("C2").Resize(N, 1).Value = x3

End Sub


Public Function CountRows(ByRef r As Range) As Long
    If IsEmpty(r) Then
        CountRows = 0
    ElseIf IsEmpty(r.Offset(1, 0)) Then
        CountRows = 1
    Else
        CountRows = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count
    End If
End Function

答案 1 :(得分:0)

1.使用Array1Array2

使ReDimPreserve大小相等

2.Declare Array3的大小:Max(size of Array1,size of Array2)

3.检查Array2和Merge

中的IsMissingIsEmpty
Sub MyMerger()
Dim Array1, Array2
Array1 = Array(5, 6, 7, 8, 9, 10, 11)    
Array2 = Array(, , 9, , , 2)    

ReDim Preserve Array2(UBound(Array1))    
ReDim Array3(WorksheetFunction.Max(UBound(Array1), UBound(Array2)))    

For i = 0 To UBound(Array3)
    If Not (IsMissing(Array2(i)) Or IsEmpty(Array2(i))) Then
    Array3(i) = Array2(i)
    Else
    Array3(i) = Array1(i)

    End If
Next i
End Sub