Excel 如何输入相同的值来代替Vlookup`#N/A`

Excel 如何输入相同的值来代替Vlookup`#N/A`,excel,vba,vlookup,Excel,Vba,Vlookup,我想从它的缩写形式更新端口代码。假设我有端口代码DMM。IVLOOKUP此单元格针对SADMM。这意味着如果我键入DMM,我将得到SADMM。但是如果我没有DMM,它将显示#N/A。我要的不是这个,而是数字万用表;如果VLOOKUP找不到原始值,则返回原始值 代码 Sub Vlookup_POD() On Error Resume Next Dim rng As Range, FinalResult As Variant, Table_Range As Range, L

我想从它的缩写形式更新端口代码。假设我有端口代码
DMM
。I
VLOOKUP
此单元格针对
SADMM
。这意味着如果我键入
DMM
,我将得到
SADMM
。但是如果我没有
DMM
,它将显示
#N/A
。我要的不是这个,而是数字万用表;如果
VLOOKUP
找不到原始值,则返回原始值

代码

Sub Vlookup_POD()
    On Error Resume Next
    
    Dim rng As Range, FinalResult As Variant, Table_Range As Range, LookupValue As Range

    Set rng = Sheets("Sheet3").Range(Range("I14"), Range("I14").End(xlDown))

    Set Table_Range = Sheets("Pod").Range("A1:B25")

    Set LookupValue = Sheets("Sheet3").Range(Range("I14"), Range("I14").End(xlDown))
    'Range ("I14:I500")

    FinalResult = Application.WorksheetFunction.VLookup(LookupValue, Table_Range, 2, False)
    rng = FinalResult
End Sub

我通常使用
IsError()
来捕获此类错误。这里有一个例子

FinalResult = Application.VLookup(LookupValue, Table_Range, 2, False)

If IsError(FinalResult) Then FinalResult = LookupValue

rng.Value = FinalResult
注意:如果我想捕获特定错误,则使用


再来一个提示。避免不必要地使用“错误时继续下一步”。仅在需要时使用。或者更好的是,纠正错误处理。

@Siddharth Rout,不是批评:(

使用字典的替代方法:

    Sub DictMatch()
        'set vars
        Dim arr, arr2, j As Long, dict As Object
        Set dict = CreateObject("Scripting.Dictionary") 'create dictionary lateB
        
        'source = lookupVars
        arr = Sheet1.Range("A1:A" & Sheet1.Cells(Rows.Count, 1).End(xlUp).Row).Value2 'load source
        For j = 1 To UBound(arr) 'traverse source
            dict(arr(j, 1)) = Empty
        Next j
        
        'compare
        arr2 = Sheet2.Range("A1").CurrentRegion.Value2 'load source
        For j = 1 To UBound(arr2)
            If dict.Exists(arr2(j, 1)) Then 'matching happens here, compare data from target with dictionary
                arr(j, 1) = arr2(j, 2) 'write to target array if match
            End If
        Next j
        
        'dumb to sheet
        With Sheet1
            .Range(.Cells(1, 2), .Cells(UBound(arr), 2)) = arr 'dumping in col 2 but if you want to replace just change col nr
        End With
    End Sub

通过使用“vba字典”,您还可以成倍地提高代码的性能执行查找。虽然有时很有用,但在大多数情况下,最好不要在vba中使用工作表函数。我的帖子只处理OP当前存在的问题。请随意发布一个答案,以建议替代代码以提高原始代码的性能:)哦,我感觉不错。我只是鼓励你发布一个答案;)Sheet1和Sheet2与问题中的Sheet3和Sheets有什么关系?如果只是复制粘贴就不会有意思了,不是吗。如果
arr2=Sheets(“Pod”)。范围(“A1:B25”)
对于j=1到UBound(arr2)如何更新arr中的所有元素,如果说
UBound(arr)
是100?它不会。仅使用第1列和第2列。第1列用于查找,第2列用于替换arr中组织值的值。仅当其匹配时(我在测试表的第2列中添加匹配项,但在最终版本中,它应替换col1的值)。