检查VLOOKUP

时间:2017-07-03 08:16:56

标签: excel excel-formula

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

这是我当前的设置,我有一个表格,其中包含下一列中输出的所有代码。如果所有代码都是三位数,我可以这样做=VLOOKUP((LEFT(E6,3)&"*"),D1:E3,2,FALSE),但遗憾的是不是。

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

这只能在VBS中实现还是有其他方式?

修改:Code and Numbers

代码列格式化为文本。如果我将值3输入LEFT,则它不适用于两位数。无论如何我可以使它适用于1,2和3位数代码吗?代码也不重叠,例如,代码表中不会有96和965.

3 个答案:

答案 0 :(得分:2)

七个嵌套的IF作为限制指向一个非常旧版本的Excel。您可能需要考虑升级到本千年仍然支持的版本。

但是您的主要问题是查找的数据类型是文本,因为您将字符串与通配符连接在一起。而您的查找表的第一列可能由数字组成。

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

如果要使用Vlookup,那么帮助列将需要是查找范围的第一列。

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

enter image description here

H列显示已在G列中应用的公式。

编辑:

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

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

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

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

enter image description here

答案 1 :(得分:1)

=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构建条件匹配的行号数组,否则返回FALSE。然后,Small函数返回数组中最小的结果,该结果将是条件匹配的第一行。

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

enter image description here

答案 2 :(得分:1)

如果A栏中的数字总是6位+代码长度,您可以使用它:

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

enter image description here