2014-02-05 56 views
0

我有行1到10和列這些條目A到d:VBA級聯陣列比較 - 誤差1004上來

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的連接「虛擬列」。然後,我想要創建一個第三個數組,該數組使用連接的數組給出每個數組元素的MATCH結果A和B相比C和D相同(有一點需要說明的是:這是我想稍後構建的更復雜的原型)。

它可以運行到第6天元素,但除此之外,它給了我1004錯誤(在監視窗口中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

WorksheetFunction.Match()如果未找到匹配項,則會引發錯誤。

不用捕獲的錯誤,你可以使用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 
+0

謝謝蒂姆 - 我會在一段時間內嘗試一下並回報。我不知道WorksheetFunction之間有區別。 和應用程序。 。 – EndlessLoop

+0

所有的好 - 謝謝你的答案。我將探討現在使用WorksheetFunction和Application之間的區別。 – EndlessLoop

1

它崩潰,因爲Match函數未找到該項目。

您可以使用On Error Resume Next,然後檢查Err的值以查看是否找到匹配項。並且,您不需要Dim Column1() As Variant。一個變種可以是一個數組,因此它更乾淨。

+0

感謝澄清,stenci。我會放棄一下,看看我能否弄清楚。 – EndlessLoop