VLOOKUP与空单元格
这是我的2列
AB Spain [EMPTY] France Euros Spain Euros
在另一个单元格中,我想写一个公式来写每个国家的货币。 如果我有:
C1 =西class牙,C2 =法国,
我想要有
D1 =欧元,D2 =欧元。
我尝试了VLOOKUP
,但它给了我
C1 = [空],C2 =欧元
非常感谢您的宝贵时间
正如其他人所说, VLOOKUP
将返回它find的第一个匹配,这就是为什么你得到Spain
[EMPTY]
。
您可以通过添加中间列来解决此问题。 让我们假设你插入一个公式=IF(C1="","",A1)
的列B
,并复制所有使用的行。
D栏是Spain
, France
等
列E现在=VLOOKUP(D1,B:C,2,0)
如果您可以将您的列分类,按列A进行sorting,然后按B降序(ZA),然后使用您正在尝试使用的vlookup。 这将使国家的价值第一,所以V-Lookup将返回一个价值而不是空的。 当返回空时,它在列A中的条目的每个单个实例都有一个空值。 但是,如果A中的条目具有多个值,则会从降序中select第一个。
那么你是否有这样的情况,A列中的一个条目有多个超过1个货币的值和一个空白条目?
然而,这有一个缺点,就是订单现在很重要,所以如果数据被添加到这个电子表格中,每次都必须发生重新sorting。
我比公式更像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
公式返回零。 所以第一个数组id {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)))
- 否则就是“不匹配”
我会把它射向一个名叫Barry Houdini的公式天才,看看他能缩短多less
下面放大的样本(包括一个真实的空白结果)
我觉得这里是一个骗局…..不要问我任何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确认