我有一份包含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
),就像瑞典一样。
如何编辑公式,以便在没有匹配的国家/地区值时将单元格保留为空?
答案 0 :(得分:26)
答案 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
函数。 :)
注意:此方法仅应用于返回实际文本的列。如果您要返回数字,日期等,则可以省略此包装器。
=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
(*):如果您对此一无所知,就这么简单:
对于德语版本,可以添加另一个:
'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`