2016-11-22 1 views
0

VBA에서 일련의 VLOOKUP을 수행하려고하고 있으며 시트의 값을 개별적으로 반복하지 않고 EVALUATE 함수로 일괄 처리하는 방법이 있어야한다고 생각했습니다. 나는 이미 그 방법을 알고있다). 하지만 조회 값을 "동적"으로 만드는 데 어려움을 겪고 있습니다.VBA에서 EVOOUATE와 VLOOKUP을 결합하는 방법

rngJ2.Value= Evaluate("VLOOKUP(Sheet2!I" & rngJ2.address(row) & ",Sheet1!A:H,8,FALSE)") 
:

Dim ws1 as worksheets, ws2 as worksheet, rngJ2 as Range, Lastrow2 as long 

Set ws1 = ActiveWorkbook.Sheets("Sheet1") 
Set ws2 = ActiveWorkbook.Sheets("Sheet2") 

LastRow2 = ws2.Cells.Find(What:="*", _ 
       After:=Range("A1"), _ 
       LookAt:=xlPart, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByRows, _ 
       SearchDirection:=xlPrevious, _ 
       MatchCase:=False).Row 

set rngJ2 = ws2.range("J2:J" & Lastrow2) 

을 지금 여기에 내가 rngJ2.address (행) 부분은 올바른 구문 아니라는 것을 알고, 다음에 수행 할 작업입니다 : 내가 지금까지 알아 낸 입니다

rngJ2.address (행) 부분을 사용하여 수행하려는 작업은 셀 J5가 I5를 조회 값으로 사용하고 J12가 I12 등을 사용하도록 범위의 각 셀에 대해 적절한 행을 정의하고 있습니다.

모두 아이디어?

+0

범위 rngJ2 여러 행이됩니다, VLOOKUP의 첫 번째 기준은 그을음 ​​세포이다. –

+0

VLookUp 결과를 열에 넣고 있습니까? 그렇다면 수식을 첫 번째 수식에 입력하고 Range.FillDown을 사용하여 여러 행에 대한 수식을 빠르게 사용할 수 있습니다. – Rdster

답변

1

실제로 거기에는 Evaluate이 전혀 필요하지 않습니다. 대신 Worksheetfunction 버전을 사용할 수 있습니다

rngJ2.Value = WorksheetFunction.VLookup(rngJ2.Offset(, -1), Sheets("Sheet1").Range("A:H"), 8, False) 
+0

나는 그 오프셋 트릭을 생각하지 못했지만, 정확히 내가 찾고 있었던 것이었다. 나는 VLOOKUP이 그렇게 전체 범위에 배정 될 수 있다는 것을 알지 못해서 고마워 !!! –

+0

조회 값 부분에있는 여러 셀을 사용하여 'Evaluate'로 볼을 플레이하도록 VLOOKUP을 얻을 수는 있지만 몇 가지 추가 구문이 필요하기 때문에 ** ** 많이 ** 간단합니다! – Rory

관련 문제