检查VLOOKUP中的一位,两位或三位数字

我有大约30个数字,它们是代码的1,2或3个数字。 这些代码附在其他号码的前面。 我想知道一个数字前面的代码是什么,例如数字35467036的前两位数字与代码35匹配。 所以我想要的输出是1.5

这是我当前的设置,我有一个表中的所有代码后面跟着下一列的输出。 如果所有的代码都是三位数字,我可以这样做=VLOOKUP((LEFT(E6,3)&"*"),D1:E3,2,FALSE)但不幸的是他们不是。

我也尝试使用嵌套的IF语句,但我只能走7级。

这是唯一可能的VBS或有其他方法吗?

编辑: 代码和数字

代码列被格式化为文本。 如果我将值3input到左侧,则不能用于两位数字。 无论如何,我可以使它为1,2和3位数字代码? 而且代码不重叠,例如代码表中不会有96和965。

七个嵌套的IFs作为限制指向一个非常旧版本的Excel。 你可能要考虑升级到本世纪仍然支持的版本。

但是你的主要问题是你的查询的数据types是文本,因为你用一个通配符连接了一个string。 而查找表的第一列可能是由数字组成的。

为了解决这个问题,你需要添加一个文本列到你的查找表中,将数值表示为一个文本值。

如果你想使用Vlookup,那么这个帮助列将需要成为你的查询范围的第一列。

您可以使用索引/匹配而不是Vlookup独立于列顺序,因为此屏幕截图显示:

在这里输入图像说明

H列显示了在G栏中应用的公式

编辑:

根据您发布的屏幕截图,您需要从E列到F列的表格中查找,此表中只有短代码。 因此,将通配符添加到查找值是没有意义的。 您只需提取您想要用于查找的值。

如果只想查找两位数字,则只需提取两位数字。 添加一个通配符不会删除第三个数字。

在下面的屏幕截图中,辅助列向LEFT()函数提供要提取的字符数,然后在VLookup中使用该值。

 =VLOOKUP(LEFT(A1,B1),$E$1:$F$5,2,FALSE) 

在这里输入图像描述

 =INDEX($G$2:$G$5, SMALL( IF(LEFT(A1,3)*1=$F$2:$F$5,ROW($G$2:$G$5)-1, IF(LEFT(A1,2)*1=$F$2:$F$5,ROW($G$2:$G$5)-1, IF(LEFT(A1,1)*1=$F$2:$F$5,ROW($G$2:$G$5)-1))),1)) 

=INDEX(LookupValues,Small(ArrayOfRowsFromIfStatements,FirstRow))

这是一个数组公式,因此您仍需要在公式栏中使用Ctrl + Shift + Enter

我们使用If来构build条件匹配的Row数组,如果不匹配则返回FALSE。 小函数然后返回数组中最小的结果,这是条件匹配的第一行。

然后我们索引返回该行号的结果(从行中扣除-1来抵消标题)。

在这里输入图像说明

如果你在A列的数字总是6位数字+代码长度,你可以使用这个:

 =VLOOKUP(--LEFT(A1,LEN(A1)-6),E2:F5,2,FALSE) 

在这里输入图像说明