VBA连接数组比较 - 错误1004即将到来

时间:2014-02-05 23:12:09

标签: excel excel-vba vba

我在第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

提前致谢。

2 个答案:

答案 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它更清晰。