我是Excel VBA的新手,我来自SAS编程背景,这意味着我没有使用大量数组,因此几乎没有任何经验。所以请原谅我,如果我得到任何错误的术语。
我有2个动态数组,想要根据这两个数据创建第3个数组,它们每个都有相同的元素数,并且都是1维。 Array1将填充所有元素 - 但是Array2将填充一些元素,但现在大多数都是空白的。每当Array2填充一个元素时,它将替换Array1上Array3的任何元素编号。
我为我正在寻找的内容制作了一个可视化截图。
任何帮助或可能的功能,我可以更多地了解它会有所帮助!
答案 0 :(得分:0)
所以你想要这个:
- >
我使用了这段代码:
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.使用Array1
和Array2
ReDim
,Preserve
大小相等
2.Declare Array3
的大小:Max(size of Array1,size of Array2)
3.检查Array2和Merge
中的IsMissing
或IsEmpty
值
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