2016-12-21 142 views
-1

我尝试了几种方法,但我的代码中仍存在问题。VBA中的索引/匹配

我想这样做(这个例子中Q2上Sheet4)什么:

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

我想这样做对与内容的所有行中塔K上表4所以我会可能需要 “对于i = 1 ...”

我试了一下:

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 

非常感谢! 安迪

整个模块:

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

您好,欢迎来到StackOverflow。请花一些时间阅读帮助页面,尤其是名为[“我可以询问什么主题?”(http://stackoverflow.com/help/on-topic)和[“我应该问什么类型的问题避免问?“](http://stackoverflow.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackexchange.com/q/156810/204922)。您可能还想了解[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 –

+0

'Match(Sheet4.Cells(i,“Q”)。Value ...' –

+0

谢谢,Scott!不幸的是它表示运行时错误'1004':object'_Worksheet'的方法'范围'失败。在我的代码中另一个更大的问题... –

回答

0

您是否尝试过类似下面的代码:

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 

你只需要定义(LastRowSheet4和LastRowSheet8)两片的上端和这应该工作。

+0

我很感谢你的快速回答,皮特。不幸的是,我得到这个:“运行时错误'0':下标超出范围'你有一个想法是什么意思? –

+0

对不起,它是运行时错误'9' –

+0

您是否定义了LastRowSheet4和LastRowSheet8? –

0

感谢您的帮助。我解决了录制宏并修改它的问题:

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)