18

我有一个带有 2 个工作表的 Excel 工作簿:国家和公司。公司工作表在国家工作表中通过VLOOKUPs 部分填写,如下所示:

国家:

     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将适当的值放在 cell 中companies!C5。相反,它应该将单元格留空,并且只在国家选项卡中显示时输入零 ( 0) 0,就像在瑞典的情况一样。

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

4

8 回答 8

45

这应该解决它:

=VLOOKUP(...) & ""

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

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

于 2016-07-30T22:21:08.713 回答
8
=CONCATENATE(VLOOKUP($B2;countries!$A$1:$C$5;MATCH(companies!B$1;countries!$1:$1;0);FALSE))

连接确保数据被视为字符串而不是数字。如果该值只是一个空单元格,您只会得到一个空单元格。

于 2014-04-30T00:09:25.123 回答
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);
    "")
于 2013-04-20T21:37:01.717 回答
1

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

=IF(LEN(VLOOKUP(args) & "")=0,"",VLOOKUP(args))
于 2018-06-21T01:03:28.197 回答
0

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

于 2013-04-20T22:13:06.070 回答
0

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

于 2014-01-09T23:46:39.587 回答
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)),"")

奖金:固定!你所有的公式在函数参数之间都错误地使用了分号而不是逗号,我很惊讶没有人注意到这一点。>.<

通用

=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)),"")- 对于强制值

于 2018-07-11T02:26:30.450 回答
0

另一个解决方案是使用 (*) 一个 UDF(用户定义函数)vlookup2,它大大简化了典型vlookup用法(并尊重良好的性能和更易读的公式)。

所以用法将在给定的示例中:

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

而不是例如(基于漂亮的枕套示例):

=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. 插入一个新模块并将上面的代码粘贴到正确的编辑器中 在此处输入图像描述
  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`
于 2019-04-18T09:44:21.007 回答