VLookup与空单元格

时间:2011-12-30 11:55:37

标签: excel excel-formula

以下是我的2栏

A       B
Spain   [EMPTY]
France  Euros
Spain   Euros

在另一个单元格中,我想写一个能够写出每个国家货币的公式。就像我有:

C1 =西班牙,C2 =法国,
我想要有 D1 =欧元,D2 =欧元。

我用VLOOKUP试了一下,但它给了我 C1 = [空],C2 =欧元

非常感谢你的时间

4 个答案:

答案 0 :(得分:2)

正如其他人所评论的那样,VLOOKUP会返回找到的第一个匹配项,这就是[EMPTY]获得Spain的原因。 您可以通过添加中间列来解决此问题。假设您使用公式B插入列=IF(C1="","",A1)并向下复制所有已使用的行。

D列是SpainFrance

E栏现在是=VLOOKUP(D1,B:C,2,0)

答案 1 :(得分:2)

如果您可以对列进行排序,请按列A排序,然后按B降序排序(Z-A),然后使用您尝试使用的vlookup。这将使该国家的价值为1,因此V-Lookup将返回一个谷而不是空。当返回empty时,因为A列中该条目的每个单个实例都有一个空值。但是,如果A中的条目具有多个值,它将从降序中选择第一个。

那么您是否有这样的情况:A列中的条目具有超过1种货币和空白条目的多个值?

然而,这有一个陷阱,因为订单现在很重要,所以如果将数据添加到此电子表格中,则每次都必须进行重新排序。

答案 2 :(得分:1)

我更喜欢VBA而不是公式,但这个(可怕的!)数组公式将返回第一个非空白匹配

在D1中放入 =IF(MAX(IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0))>0,INDEX(B$1:B$6,MAX(IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0))),"no match")
然后按Shift - Ctrl - Enter一起输入

如何运作

  • IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0))检查A1是否与A1到A6中的每一个匹配,相应地B1到B6是否为非空。
  • 如果这两个条件都是TRUE,那么这些匹配的行号将放在一个数组中,如果FALSE公式返回零。所以第一个数组标识为{0,0,3,0,0,0}
  • 如果此数组的MAX不为零,则公式会使用INDEX中的INDEX(B$1:B$6,MAX(IF(--(A$1:A$6=C1)*LEN(B$1:B$6)>0,ROW(A$1:A$6),0)))
  • 从B列返回此单元格位置
  • 否则就会有“不匹配”

我会把它拍到一个叫做Barry Houdini的配方天才,看看他能缩短多少呢

放大样本(包括真正的空白结果)

enter image description here

答案 3 :(得分:1)

我觉得这里是骗局.....不要问我任何VBA问题!

我注意到使用MAX实际上意味着您的公式(以及克里斯修正后的版本)实际上提供了最后非空白匹配。您也可以使用非CSE LOOKUP公式,即

=LOOKUP(2,1/(B$2:B$6<>"")/(A$2:A$6=C1),B$2:B$6)

如果没有匹配则返回#N / A

对于文本“不匹配”而不是假设公式返回文本值,您可以使用2003兼容

=LOOKUP("zzz",IF({1,0},"No match",LOOKUP(2,1/(B$2:B$6<>"")/(A$2:A$6=C1),B$2:B$6)))

对于第一次非空白匹配,您可以以类似的方式使用INDEX/MATCH,即

=INDEX(B$2:B$6,MATCH(1,(B$2:B$6<>"")*(A$2:A$6=C1),0))

使用CTRL + SHIFT + ENTER确认