Iferror / Vlookup使用变量

时间:2013-12-18 07:31:28

标签: excel excel-vba vba

我已经记录了一个Excel函数(Iferror / Vlookup),我需要将其修改为inpput变量以使其更具动态性(允许列移动)。以下是我想要做的简要概述。第一部分是记录的函数和我想要添加的变量。第二部分是我提出的解决方案。我的问题是我需要将函数放入excel并将其复制到50,000行以上。所以我的错误处理解决方案在这里不起作用。是否可以使用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

1 个答案:

答案 0 :(得分: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实例化。如果这有帮助,请告诉我们。

修改

与OP聊天:

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

需要进行简单灵活的查找。