Excel vba:检查VLookup是否返回空值,假设Vlookup将null替换为空

时间:2017-10-25 09:38:57

标签: excel vba excel-vba vlookup

所以我有一张不同地区的表格和不同年份的相应价值2014 - 2017年。并非所有地区都有2017年的价值。但是,如果我创建WorksheetFunction.VLookup(...),如果相关单元格为空,它将返回0。

如果给定区域的单元格为空,我需要设置我的特殊值(-1)而不是0,但是,我无法区分真零和零Vlookup返回而不是空值。我该怎么做?

编辑:我不能在单个单元格上使用IsEmpty,因为我不知道结果的单元格地址 - 我循环使用它们甚至不知道第一个参数的地址。我只有结果 - 无论是真实的还是假的零。

3 个答案:

答案 0 :(得分:0)

我不确定,但我认为使用IF,ISEmpty会解决您的问题。

使用WorksheetFunction.Match获取单元格地址

currentCell= the cell in which you'll be putting value
concernedCell=The cell which can be empty

If(Isempty(concernedCell)) Then
currentCell.value=-1
Else
currentCell.value=concernedCell.value

答案 1 :(得分:0)

您可以检查VLOOKUP是否返回空单元格。

作为工作表公式,您可以使用:=IF(VLOOKUP(K9,$F$2:$G$6,2,FALSE)="",-1,VLOOKUP(K9,$F$2:$G$6,2,FALSE))

作为VBA示例,您可以使用:

Public Function MyVlookup(lookup_value, table_array As Range, col_index_num As Long, Optional range_lookup As Boolean = False) As Variant

    Dim ReturnValue As Variant

    ReturnValue = WorksheetFunction.VLookup(lookup_value, table_array, col_index_num, range_lookup)

    If IsEmpty(ReturnValue) Then
        MyVlookup = -1
    Else
        MyVlookup = ReturnValue
    End If

End Function

答案 2 :(得分:0)

工作this answer

=if(len(vlookup(a2,f$2:g$20,2))=0,"",vlookup(a2,f$2:g$20,2))

诀窍是使用任何不在result = VLookup(...)上的检查功能,而是在VLookup本身,在它有时间将空虚改为零之前使用。