我在第1到10行和第A到D列中有这些条目:
a 10 a 10
b 20 b 20
c 30 c 30
d 40 d 40
e 50 e 50
f 60 f 60
g 70
h 80
i 90
j 100
使用VBA代码(我将在下面粘贴),我想,使用VBA数组,构建A和B以及C和D的连接“虚拟列”。然后,我想创建第三个数组用一个数组填充,使用A和B的串联与C和D的相同,为每个数组元素提供MATCH结果。(有一点指向所有这些:它是我想要构建的更复杂的原型稍后。)
它一直工作到数组中的第6个元素,但除此之外它给了我1004错误(在Watch窗口中的Empty之后的元素值)。
有人可以给我一些指示吗?
这是(可能不优雅的)VBA代码:
Sub concatarray()
Dim count1 As Integer
Dim count2 As Integer
count1 = Application.CountA(Columns("A:A"))
count2 = Application.CountA(Columns("C:C"))
Dim Column1() As Variant
Dim Column2() As Variant
Dim virtColumn3() As Variant
Dim Column4() As Variant
Dim Column5() As Variant
Dim virtColumn6() As Variant
ReDim virtColumn3(1 To count1, 1 To 1)
ReDim virtColumn6(1 To count2, 1 To 1)
Column1 = Range("A1:A" & count1)
Column2 = Range("B1:B" & count1)
Column4 = Range("E1:E" & count2)
Column5 = Range("F1:F" & count2)
For i = 1 To count1
virtColumn3(i, 1) = Column1(i, 1) & Column2(i, 1)
Next i
For i = 1 To count2
virtColumn6(i, 1) = Column4(i, 1) & Column5(i, 1)
Next i
Dim virtColumn7() As Variant
ReDim virtColumn7(1 To count1, 1 To 1)
For i = 1 To count1
virtColumn7(i, 1) = WorksheetFunction.Match(virtColumn3(i, 1), virtColumn6, 0)
Next i
End Sub
这几乎肯定是这个片段的错误:
For i = 1 To count1
virtColumn7(i, 1) = WorksheetFunction.Match(virtColumn3(i, 1), virtColumn6, 0)
Next i
提前致谢。
答案 0 :(得分:2)
WorksheetFunction.Match()
会抛出错误。
您可以使用{em>返回错误的Application.Match()
版本,而不是捕获该错误:
Dim v 'variant
For i = 1 To count1
v = Application.Match(virtColumn3(i, 1), virtColumn6, 0)
If Not IsError(v) Then virtColumn7(i, 1) = v
Next i
答案 1 :(得分:1)
崩溃是因为Match
函数找不到该项目。
您可以使用On Error Resume Next
,然后检查Err
的值,看看是否找到匹配项。
此外,您不需要Dim Column1() As Variant
。变体可以是一个数组,所以Dim Column1 As Variant
它更清晰。