使用 Right()、Len() 和 Find() 的公式输出出现 VLOOKUP 错误

VLOOKUP error with output of formula using Right(),Len() and Find()

在 table A 中,我有一个代码列表,其中包含 1-3 个字母后的数字部分。我需要使用数值通过 table B 中详述的范围找到相应的年份。

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 是 table 中的第一个代码)

这很有效,因为所有代码在数字部分之前都有一个 C。

我发现使用示例数字段(不使用上述公式)我可以使用带有 "True" 标志的 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 等函数总是 return 文本结果,因此文本格式的查找值与数字 [=90] 之间的数据不匹配=] - 平底船使用的 VALUE 函数将查找值转换为数字

另一种可能的方法:

=LOOKUP(LOOKUP(100,RIGHT(B7,{1,2})+0),Table)

解释:

这部分公式从字符串末尾检索数字(假设最多2位):

LOOKUP(100,RIGHT(B7,{1,2})+0)

RIGHT函数是returning一个由B7的最后1个和最后2个字符组成的数组,所以当B7 = AC19 return 是这样的数组

{"9","19"}

引号表示这些是文本值,但我们需要数字,因此 +0 将其转换为以下内容

{9,19}

现在,当我们在该数组中查找 100 的较大值(在本例中相对)时,我们得到与 last 数字的匹配,在本例中为 19

[请注意,当 ABC2 中只有一个数字时,数组是 {"2","C"},它用 +0 转换为 {2,"#VALUE!"} - LOOKUP 忽略错误,仍然 return 是最后一个数字,即 2]

所以现在 19 是我们第二个 LOOKUP 函数中的查找值,假设 Table 是 TableB(没有headers)。

这是一个更"normal" LOOKUP的函数- 19在Table的第一列中查找并匹配小于或等于的最大值19,即 11。然后 returns 来自同一行但在 Table 的 last 列中的值,即 2012

LOOKUP 和 table 数组总是在 table 的第一列匹配,并且 returns 是最后一列的值(除非 table 比高度宽,在这种情况下,它与第一个 和 returns 匹配最后一个 的值)

参见下面的示例:

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