【问题标题】:Excel vba: check if VLookup returns empty value, given that Vlookup substitutes empty with zeroExcel vba:检查 VLookup 是否返回空值,假设 Vlookup 用零替换空
【发布时间】:2017-10-25 09:38:56
【问题描述】:

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

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

编辑:我不能在单个单元格上使用IsEmpty,因为我不知道结果的单元格地址 - 我在没有甚至知道第一个参数的地址。我所拥有的只是结果——要么是真零,要么是假零。

【问题讨论】:

  • 您可以使用IsEmpty函数检查单元格是否为空。
  • @Egan Wolf 编辑了问题。
  • 如果查找单元格为空,WorksheetFunction.VLookup 不会返回 0。仅当您尝试将结果存储在数字变量中时,才会将其转换为 0。
  • @Ans 你能显示(至少)使用VLookup的代码行吗?

标签: vba excel vlookup


【解决方案1】:

您可以检查 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】:

    工作过this answer

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

    诀窍是在 VLookup 本身上使用任何检查函数,而不是在 VLookup 本身上,在它有时间将空虚变为零之前。

    【讨论】:

      【解决方案3】:

      我不确定,但我认为使用 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
      

      【讨论】:

      • 不知道currentCell的地址,所以没用。我只能玩 Vlookup 结果。
      • 您能否分享您的代码,重点是,您将 vlookup 的结果放在某处,必须给出地址。或者,可能是我遗漏了一些东西。分享代码会有很大帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多