2017-01-23 3 views
1

Ich versuche, ein Makro zu schreiben, um zwei Bereiche, Rng1 und Rng2 in Excel zu vergleichen. Rng1, ("f2: f15"), enthält Zielnummern, die verwendet werden. Rng2, ("a2: a91"), enthält die Nummern für alle möglichen Ziele. Die drei Spalten rechts von Rng2 ("b2: b91"), ("c2: c91") und ("d2: d91") enthalten die x-, y- und z-Koordinatenwerte, die jeder Zielnummer zugeordnet sind. Ich möchte, dass dieses Makro die 3 Spalten rechts von Rng1 ("g2: g15"), ("h2: h15") und ("i2: i15") mit den Koordinatenwerten von Zielnummer in Rng1 gefunden. Der folgende Code, den ich geschrieben habe, ist neu "Laufzeitfehler '13', Typ Mismatch".Bereiche vergleichen und Werte in VBA-Makro auffüllen

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 

Vielen Dank!

+0

Schreiben heraus, wollen sie, genau das, was Sie mit 'For I = 1 bis Rng1' Aussage versuchen zu erreichen. Und wie viele Zellen würden Sie in 'Rng1 (1)' erwarten? –

+0

Ich versuche, I = 1 zu Rng1 als Zähler zu verwenden, um den Wert in Rng1 zu verfolgen, da ich versuche, j als einen Zähler zu verwenden, um Werte in Rng2 zu verfolgen. Ich bin kein sehr erfahrener Programmierer und mag das sehr falsch machen. Vielen Dank! – Chris

+1

Aber Rng1 ist ein Multicell-Bereich-Objekt. Also eine Schleife, die von 1 bis ?? ist nicht sinnvoll. Deshalb erhalten Sie den Typenkonfliktfehler. Sehen Sie sich die VBA-Hilfe für "For ... Next" -Schleifen an. Und dann, später, hast du 'Für jede Zelle in Rng1 (i)'. Wenn I = 1, dann wäre Rng1 (I) die erste Zelle in diesem Bereich. Wiederum wäre jede Zelle in Rng1 (I) nur eine Zelle. Sie könnten wahrscheinlich die "I" - und "J" -Schleifen vollständig eliminieren und trotzdem die einzelnen Zellen in den Bereichen durchlaufen. –

Antwort

0

Basierend auf Ihrer Beschreibung Ich denke, das ist, was man in Worten

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

Danke, das funktioniert super! – Chris

Verwandte Themen