2017-01-23 148 views
1

我想寫一個宏來比較Excel中的兩個範圍,Rng1和Rng2。 Rng1(「f2:f15」)包含正在使用的目標號碼。 Rng2(「a2:a91」)包含所有可能目標的編號。 Rng2右邊的三列(「b2:b91」),(「c2:c91」)和(「d2:d91」)包含與每個目標編號關聯的x,y和z座標值。我想讓這個宏做的是將Rng1右邊的3列(「g2:g15」),(「h2:h15」)和(「i2:i15」)填入座標值爲目標號碼在Rng1中找到。我寫的以下代碼是重新調整「運行時錯誤」13,類型不匹配「。在VBA中比較範圍和填充值宏

Sub macro() 
Dim Rng1 As Range, Rng2 As Range, Cell1 As Range, Cell2 As Range 
Set Rng1 = Range("f2:f15") 
Set Rng2 = Range("a2:a91") 
For i = 1 To Rng1 
    For j = 1 To Rng2 
     For Each Cell1 In Rng1(i) 
      For Each Cell2 In Rng1(j) 
       If Cell1.Value = Cell2.Value Then 
       'cell1.Offset(0, 1) = cell2.Offset(0, 1) 
       'cell1.Offset(0, 1) = cell2.Offset(0, 1) 
       'cell1.Offset(0, 1) = cell2.Offset(0, 1) 
       Cells(2 + i, 7) = Cells(2 + j, 2) 
       Cells(2 + i, 8) = Cells(2 + j, 3) 
       Cells(2 + i, 9) = Cells(2 + j, 4) 
      End If 
      Next Cell2 
     Next Cell1 
    Next j 
    Next i 

End Sub 

謝謝!

+0

寫出,在什麼樣的話,你想用'對於I = 1到Rng1'語句來完成什麼。你會期望在'Rng1(1)'中有多少個Cell? –

+0

我正在嘗試使用I = 1到Rng1作爲計數器來跟蹤Rng1中的值,因爲我試圖使用j作爲計數器來跟蹤Rng2中的值。我不是一個非常有經驗的編碼員,可能會做得很不正確。謝謝! – Chris

+1

但是Rng1是一個多單元範圍對象。所以一個從1到?的循環沒有意義。這就是爲什麼你得到類型不匹配錯誤。查看「For ... Next」循環的VBA幫助。然後,之後,你有'對於Rng1(i)'中的每個單元。如果I = 1,那麼Rng1(I)將是該範圍內的第一個單元格。再次,Rng1(I)中的每個單元格將只有一個單元格。你可能完全消除'I'和'j'循環,並且仍然循環遍歷範圍中的每個單元格。 –

回答

0

根據您的描述,我認爲這是你想要

Sub Demo() 
    Dim Rng1 As Range, Rng2 As Range, Cell1 As Range 
    Dim i As Variant 
    Set Rng1 = Range("f2:f15") 
    Set Rng2 = Range("a2:a91") 

    ' Loop over the cells you want to add data for 
    For Each Cell1 In Rng1 
     ' locate current value in range 2 
     i = Application.Match(Cell1.Value, Rng2, 0) 
     If Not IsError(i) Then 
      ' if found copy offset data 
      Cell1.Offset(0, 1) = Rng2.Cells(i, 2) 
      Cell1.Offset(0, 2) = Rng2.Cells(i, 3) 
      Cell1.Offset(0, 3) = Rng2.Cells(i, 4) 
     End If 
    Next 
End Sub 
+0

謝謝,這真棒! – Chris