2013-12-18 2 views
2

변수를 입력하여 변수를보다 동적으로 만들 수 있도록 수정해야하는 Excel 함수 (Iferror/Vlookup)가 기록되었습니다 (열 이동 허용). 다음은 내가하고 싶은 것에 대한 간단한 개요입니다. 첫 번째 섹션은 기록 된 Function과 내가 추가하고자하는 변수입니다. 두 번째 섹션은 제 제안 된 솔루션입니다. 내 문제는 Excel로 함수를 떨어 뜨리고 50,000 행 이상을 복사해야합니다. 그래서 내 오류 처리 솔루션은 여기서 작동하지 않습니다. iferror/Vlookup을 사용하여 원래 기록한 기능을 동적으로 만들 수 있습니까? 어떤 도움을 주셔서 감사합니다.변수를 사용하는 Iferror/Vlookup

Dim Lookup1   As Long 
Dim LookupOffset As Long 
Dim LRange   As Range 


Lookup1 = -99 
LookupOffset = 28 

Set LRange = Column("CU:CV") 

With Worksheets("consolidated") 

     .Cells(2, 99).FormulaR1C1 = _ 
      "=RC[-71]-IFERROR(VLOOKUP(RC[-12],C[-2]:C[-1],2,FALSE),0)" 
     .Cells(2, 99).Copy Range(.Cells(2, 99), .Cells(glLastRow, 99)) 
     Application.CutCopyMode = False 
     .Calculate 

End With 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' Proposed Solution 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Dim Res As Variant 
On Error Resume Next 
Err.Clear 
Res = Application.WorksheetFunction.VLookup(Lookup1 - LookupOffset, LRange, 2, False) 
If Err.Number = 0 Then 
    '''''''''''''''''''''''''''''''''''''''''''''''''''' 
    ' Value found by VLookup. Continue normal execution. 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Else 
    '''''''''''''''''''''''''''''''''''''''''''''''''''' 
    ' Value NOT found by VLookup. Error handling code here. 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
End If 
+0

두 가지 : 'VLOOKUP'에 해당하는 '일반'공식은 무엇입니까 (위의 내용을 이해할 수 있지만 확실하길 원합니다). 실제로 VLOOKUP이어야합니까? VBA를 사용하는 간단한 오프셋은 설정이 상대적으로 빠릅니다. – Manhattan

답변

1

이 하나를 시도

Sub LookUpMod() 

    Dim wSht As Worksheet: Set wSht = ThisWorkbook.Sheets("Consolidated") 

    With wSht 
     On Error Resume Next 
     .Cells(2, 99).Formula = "=XCV34-IFERROR(VLOOKUP(XFC34,$I:$J,2,FALSE),0)" 
     .Range(Cells(2, 99), Cells(glLastRow, 99)).FillDown 
     .Calculate 
     On Error GoTo 0 
    End With 

End Sub 

그냥 발견하지만, 당신이 glLastRow가 제대로 인스턴스화하지 않아도. 이것이 도움이되는지 알려주십시오.

편집 : 간단한 유연 조회가 필요한 것입니다

Function LookUpMod(Str As Variant, Rng As Range, OffsetToRight As Long) 
    Application.Volatile 
    LookUpMod = Rng.Cells.Find(What:=Str).Offset(0, OffsetToRight).Value 
End Function 

:

영업 이익과 채팅 당으로.

+0

도움 주셔서 대단히 감사합니다 .... !!!! – user1624926

+0

@ user1624926 : 수락 해 주셔서 감사합니다. 그냥 알려 드리겠습니다 :'VBA'에서의 오류 처리는 그 행의 위로 처리됩니다 ('On Error ...'). 오류를 모두 건너 뛰거나 (완전히 안전하지는 않지만 빠르고 쉽기 때문에) 오류 유형별로 특정 작업을 수행 할 수 있습니다. :) – Manhattan

+0

@ user1624926 : 수락을 취소 한 이유는 무엇입니까? 네가 찾고 있던 것이 아닌가? – Manhattan

관련 문제