使用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) 

LEFTRIGHTMID类的函数总是返回文本结果,所以在文本格式的查找值和数字表之间出现数据不匹配的情况 – 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总是匹配该表的第一列,并从最后一列返回一个值(除非表的宽度比较高,在这种情况下,它与第一匹配并返回最后一行的值)

见下面附加的例子:

命名范围表以橙色显示,结果以蓝色显示

在这里输入图像描述