Excel:当VLOOKUP不匹配时,如何将单元格保留为空(而不是0)?

时间:2013-04-20 21:18:05

标签: excel

我有一份包含2个工作表的excel工作簿:国家和公司。公司工作表部分通过国家/地区工作表中的VLOOKUP填写,如下所示:

国家:

     A       B
1 COUNTRY HOF_LTO
2 Belgium    4
3 Japan      5
4 Spain
5 Sweden     0

公司:

    A         B       C
1 COMPANY  COUNTRY HOF_LTO
2 Belgacom Belgium    4
3 Onkyo    Japan      5
4 Sony     Japan      5
5 ATTM     Spain      0
6 Nokia    Sweden     0

我正在使用以下公式填充C列:

=VLOOKUP($B2;countries!$A$1:$C$5;MATCH(companies!B$1;countries!$1:$1;0);FALSE)

出现的问题是:即使Spain在国家/地区没有HOF_LTO - 值,公式也会将0作为单元格companies!C5中的相应值。相反,它应该将单元格留空,并且只在国家/地区选项卡中显示0时放入零(0),就像瑞典一样。

如何编辑公式,以便在没有匹配的国家/地区值时将单元格保留为空?

8 个答案:

答案 0 :(得分:26)

这应解决它:

=VLOOKUP(...) & ""
  

这会强制Excel使该单元格引用为文本值,   从而阻止空白转换为零。

取自https://superuser.com/a/906954/222835

答案 1 :(得分:8)

=CONCATENATE(VLOOKUP($B2;countries!$A$1:$C$5;MATCH(companies!B$1;countries!$1:$1;0);FALSE))

Concatenate确保将数据视为字符串而不是数字。如果该值只是一个空单元格,那么您只需获得一个空单元格。

答案 2 :(得分:4)

如果在您的国家/地区表单中,所有国家/地区只有在您可以使用以下内容时才会出现:

=IF(ISNUMBER(OFFSET(countries!$B$1;MATCH(B2;countries!A:A;0)-1;0));
    OFFSET(countries!$B$1;MATCH(B2;countries!A:A;0)-1;0);
    "")

答案 3 :(得分:0)

或者,如果只是您需要控制的数据的演示文稿,请调整单元格格式以将0值显示为空白而不是数字零。

答案 4 :(得分:0)

简单的解决方案:在您的国家/地区源工作簿的完整数组上查找并替换,用@替换空单元格。 (确保在执行“全部替换”时选中“仅查找整个单元格”。)然后返回并运行vlookup。复制并粘贴值以摆脱vlookup并仅保留结果。现在搜索并替换目标文件中没有任何内容的@符号。瞧。

答案 5 :(得分:0)

这是VLOOKUP +串联答案的变体,可确保数字值不会转换为字符串:

=IF(LEN(VLOOKUP(args) & "")=0,"",VLOOKUP(args))

答案 6 :(得分:0)

我发现的用于文本的最干净的方法(使用双关语)是使用CLEAN函数。 :)

注意:此方法仅应用于返回实际文本的列。如果您要返回数字,日期等,则可以省略此包装器。

使用VLOOKUP函数将CLEAN包裹起来,就像这样:

=CLEAN(VLOOKUP($B2,countries!$A$1:$C$5,MATCH(companies!B$1,countries!$1:$1,0),FALSE))

更好的是,将它们全部包裹在IFERROR中,以确保不会退回#N/A或可怕的#REF!等。像这样:

=IFERROR(CLEAN(VLOOKUP($B2,countries!$A$1:$C$5,MATCH(companies!B$1,countries!$1:$1,0),FALSE)),"")

奖金:已修复!您所有的公式都错误地使用了分号而不是函数参数之间的逗号,我很惊讶没有人意识到这一点。 >。<< / p>

通用

=IFERROR(CLEAN(VLOOKUP(lookup_value, table_array, col_index_num,FALSE)),"")-对于文本 =IFERROR(VLOOKUP(lookup_value, table_array, col_index_num,FALSE),"")-追求价值 =IFERROR(VALUE(VLOOKUP(lookup_value, table_array, col_index_num,FALSE)),"")-强制使用值

答案 7 :(得分:0)

另一种解决方案是使用(*)UDF(用户定义函数) vlookup2 ,该方法大大简化了典型的vlookup用法(并具有良好的性能和可读性)公式)。

因此用法将在给定的示例中

=VLOOKUP2(
   $B2  ;  countries!$A$1:$C$5  ;  MATCH( companies!B$1 ; countries!$1:$1 ; 0 )  ;  "" )

而不是例如(基于不错的Pillowcase example):

=VLOOKUP( 
   $B2  ;  countries!$A$1:$C$5  ;  MATCH( companies!B$1 ; countries!$1:$1 ; 0 ) ; FALSE) 
   & ""

在其他情况下(例如,搜索标准$B2可能已经是#NV或类似的内容,则可能有意义:

=VLOOKUP2(
   $B2  ;  countries!$A$1:$C$5  ;  MATCH( companies!B$1 ; countries!$1:$1 ; 0 ) ; "" ; "")

vlookup2的代码为:

'simpler to use than vlookup
'only exact matches and 0 subst value support
'https://stackoverflow.com/a/55743343/1915920
'
Function vlookup2( _
  ByRef searchCriteria As Variant, _
  ByRef matrix As Variant, _
  ByRef columnIndex As Variant, _
  Optional zeroSubst As Variant, _
  Optional errSubst As Variant )

    Dim val As Variant:  val = Application.WorksheetFunction.VLookup( _
                                 searchCriteria,  matrix,  columnIndex,  False )

    If Not IsMissing(errSubst) Then On Error GoTo EH  'EH = error handler
    If Not IsMissing(zeroSubst) And val = 0 Then val = zeroSubst

    vlookup2 = val
    Exit Function

EH:
    vlookup2 = errSubst        
End Function

(*):如果您对此一无所知,就这么简单:

  1. 按下 CTRL + F11 => Microsoft Visual Basic for Applications窗口打开
  2. 插入一个新模块,并将以上代码粘贴到正确的编辑器中 enter image description here
  3. 关闭刚刚打开的窗口

对于德语版本,可以添加另一个:

'https://stackoverflow.com/a/55743343/1915920
Function SVerweis2( _
    ByRef Suchkriterium As Variant, _
    ByRef Matrix As Variant, _
    ByRef SpaltenIndex As Variant, _
    Optional NullZahlSubst As Variant, _
    Optional FehlerSubst As Variant)

    SVerweis2 = vlookup2( Suchkriterium, Matrix, SpaltenIndex , NullZahlSubst, FehlerSubst )
End Function`