使用 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)
LEFT
、RIGHT
和 MID
等函数总是 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 以橙色显示,结果以蓝色显示
在 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)
LEFT
、RIGHT
和 MID
等函数总是 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 以橙色显示,结果以蓝色显示