2016-12-21 6 views
-1

Ich habe mehrere Möglichkeiten ausprobiert, aber ich habe immer noch ein Problem in meinem Code.Index/Match in VBA

Was ich (dieses Beispiel in Q2 auf Sheet4) zu tun:

=INDEX('Sheet8'!K:K,MATCH('Sheet4'!P2,'Sheet8'!A:A,0)) 

Ich möchte, es zu tun für alle Zeilen mit Inhalt in der Spalte K auf Blatt 4 so I‘ ll wahrscheinlich brauchen "Für i = 1 ..."

Was ich versucht:

For i = 1 To LastRowShort 
row_mtch = Application.WorksheetFunction.Match(Sheet4.Cells("Q????").Value, Sheet8.Range("A1:A"), 0) 

Sheet4.Range("R" & i).Value = Application.WorksheetFunction.Index(Sheet8.Range("K1:K" & LastRowShort), row_mtch) 
Next i 

vielen Dank! Andy

Entire Modul:

Sub MissingBoth() 

Application.ScreenUpdating = False 

Dim MyRange, CopyRange As Range 
Dim LastRow As Long 
Dim LastRowSheet4 As Long 
Dim LastRowSheet8 As Long 
Set src4 = Sheet2 
Set dst4 = Sheet4 
LastRow = src4.Cells(Cells.Rows.Count, "D").End(xlUp).Row 
LastRowSheet8 = Worksheets("Sheet8").Cells(Cells.Rows.Count, "B").End(xlUp).Row 
LastRowSheet4 = Worksheets("Sheet4").Cells(Cells.Rows.Count, "K").End(xlUp).Row 

src4.Unprotect 
dst4.Unprotect 

If src4.FilterMode = True Then 
    src4.ShowAllData 
End If 

dst4.Cells.ClearFormats 
dst4.Cells.Clear 


'Find content in the "Type of Rack" cells 
    j = 3 
    For i = 10 To LastRow 
     If src4.Cells(i, "CL").Value = "" And src4.Cells(i, "GV").Value = "" Then 
     src4.Cells(i, "CL").EntireRow.Copy dst4.Cells(j, 1) 
      j = j + 1 
     End If 
    Next i 

src4.Range("A6:GW7").Copy Destination:=dst4.Range("A1:GW2") 

'Copy every column EXCEPT the following 
dst4.Range("GW1,CM1:GU1, U1:CK1,R1:S1,P1,J1:M1").EntireColumn.Delete 

For i = 1 To LastRowSheet4 
    For i2 = 1 To LastRowSheet8 

    If Worksheets("Sheet4").Range("P" & i).Value = Worksheets("Sheet8").Range("A" & i2).Value Then 
     Worksheets("Sheet4").Range("Q" & i).Value = Worksheets("Sheet8").Range("K" & i2).Value 
    End If 

    Next i2 
Next i 

dst4.Columns("A:AX").EntireColumn.AutoFit 
dst4.Rows("1:500").RowHeight = 15 
dst4.Columns("N:O").Interior.Color = vbYellow 
dst4.Rows("1:2").Interior.ColorIndex = 15 
dst4.Range("B:I").EntireColumn.Hidden = True 

Application.ScreenUpdating = True 


End Sub 
+0

Hallo und Willkommen zu StackOverflow. Bitte nehmen Sie sich etwas Zeit, um die Hilfeseite zu lesen, insbesondere die Abschnitte mit dem Namen ["Welche Themen kann ich hier fragen?"] (Http://stackoverflow.com/help/on-topic) und ["Welche Arten von Fragen sollte ich haben nicht fragen? "] (http://stackoverflow.com/help/dont-ask). Und, was noch wichtiger ist, lesen Sie bitte [die Checkliste für Stack Overflow-Fragen] (http://meta.stackexchange.com/q/156810/204922). Vielleicht möchten Sie auch etwas über [Minimale, vollständige und überprüfbare Beispiele] (http://stackoverflow.com/help/mcve) erfahren. –

+0

'Match (Sheet4.Cells (i," Q "). Wert ...' –

+0

Danke, Scott! Leider sagt es Laufzeitfehler '1004': Methode 'Range' von Objekt '_Worksheet' fehlgeschlagen. Vielleicht gibt es ein anderes größeres Problem in meinem Code ... –

Antwort

0

Haben Sie so etwas wie der folgende Code versucht:

For i = 1 To LastRowSheet4 
    For i2 = 1 To LastRowSheet8 

    If Worksheets("Sheet4").Range("P" & i).Value = Worksheets("Sheet8").Range("A" & i2).Value Then 
     Worksheets("Sheet4").Range("Q" & i).Value = Worksheets("Sheet8").Range("K" & i2).Value 
    End If 

    Next i2 
Next i 

Sie brauchen nur die oberen Enden der beiden Blätter (LastRowSheet4 und LastRowSheet8) zu definieren und das sollte funktionieren.

+0

Ich schätze Ihre schnelle Antwort, Pete. Leider bekomme ich das: "Laufzeitfehler '0': Index außerhalb des Bereichs." Haben Sie eine Idee, was das bedeutet? –

+0

Sorry, es ist Laufzeitfehler '9' –

+0

hast du LastRowSheet4 und LastRowSheet8 definiert? –

0

Danke für Ihre Hilfe. Ich löste das Problem mit dem Aufzeichnen eines Makros und dem Modifizieren von es:

Sheet4.Cells(3, 17).FormulaR1C1 = _ 
     "=INDEX('TS-48 Matrix'!C[-7],MATCH('Missing Both'!RC[-1],'TS-48 Matrix'!C[-16],0))" 
Range("Q3").AutoFill Destination:=Range("Q3:Q" & lastRowSheet4)