使用Right(),Len()和Find()方法输出公式的VLOOKUP错误
在表中,AI有一个包含1-3个字母之后的数字组分的代码列表。 我需要通过表B中详细的范围来使用数值来find相应的年份。
Table A: Table B: Code Year Value Min Value Max Year AC19 ? 0 10 2011 ABC2 ? 11 20 2012 AC12 ? 21 30 2013 AFC30 ? 31 40 2014 GXC0 ? 41 50 2015
分开我一直在使用的数字:
=(RIGHT(B7,LEN(B7)-(FIND("C",B7)+0)))
(在这种情况下,B7是表中的第一个代码)
这适用于所有代码在数字组件之前都有一个C。
我发现使用示例数值段(不使用上面的公式)我可以使用VLOOKUP与“真”标志。 但是,当我试图运行它使用上面的公式生成的数值,我得到了#Ref! 错误。
为什么在使用上面公式收集的数据时,VLOOKUP会突然停止工作?
理想的输出是:
Code Year AC19 2012 ABC2 2011 AC12 2012 ACF30 2012 GXC0 2011
如果AC19
在B7中,请在C7中尝试并复制以适应:
=VLOOKUP(VALUE(RIGHT(B7,LEN(B7)-FIND("C",B7))),TableB,3)
像LEFT
, RIGHT
和MID
类的函数总是返回文本结果,所以在文本格式的查找值和数字表之间出现数据不匹配的情况 – punts使用的VALUE
函数将查找值转换为数字
另一种可能的方法
=LOOKUP(LOOKUP(100,RIGHT(B7,{1,2})+0),Table)
说明:
公式的这一部分从string的末尾检索数字(假设最多2位数字):
LOOKUP(100,RIGHT(B7,{1,2})+0)
RIGHT
函数返回由B7
的最后1个字符和最后2个字符组成的数组,所以当B7
= AC19返回一个这样的数组
{ “9”, “19”}
引号表明这些是文本值,但我们需要数字,所以+0将其转换为以下内容
{9,19}
现在当我们在这个数组中查找一个很大的数值(在这个例子中是100)时,我们得到了最后一个数字的匹配,在这个例子中是19
[注意ABC2中只有一个数字时,数组是{"2","C"}
,用+0转换为{2,"#VALUE!"}
– LOOKUP
忽略错误并返回最后一个数字,即2
]
所以现在19
是我们的第二个LOOKUP
函数中的查找值,假设Table是表B的三列(没有标题)。
这是一个更“正常”的LOOKUP
函数 – 在表的第一列中查找19
,并且与小于或等于19
的最大值匹配,即11 。 然后返回来自同一行,但在表的最后一列,即2012
使用表数组的LOOKUP
总是匹配该表的第一列,并从最后一列返回一个值(除非表的宽度比较高,在这种情况下,它与第一行匹配并返回最后一行的值)
见下面附加的例子:
命名范围表以橙色显示,结果以蓝色显示