2016-12-21 4 views
-1

Я пробовал несколько способов, но у меня все еще есть проблема в моем коде.Индекс/Матч в VBA

То, что я хочу сделать (этот пример в Q2 на Лист4):

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

Я хотел бы сделать это для всех строк с содержанием в колонке K на листе 4 так что я будете, вероятно, нужно "Для г = 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). И что еще более важно, прочитайте [контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/q/156810/204922). Вы также можете узнать о [Минимальных, Полных и Подтверждаемых примерах] (http://stackoverflow.com/help/mcve). –

+0

'Match (Sheet4.Cells (i,« Q »). Значение ...' –

+0

Спасибо, Скотт! К сожалению, он говорит, что ошибка времени выполнения '1004': метод 'Range' объекта'_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)