我有大约30个数字,这些数字是1,2或3位代码。这些代码附在其他数字的前面。我想知道数字前面的代码是什么,例如数字35467036
前两位与代码35
匹配。所以我希望它的输出为1.5
。
这是我当前的设置,我有一个表格,其中包含下一列中输出的所有代码。如果所有代码都是三位数,我可以这样做=VLOOKUP((LEFT(E6,3)&"*"),D1:E3,2,FALSE)
,但遗憾的是不是。
我也尝试过使用嵌套的IF语句,但我只能达到7级。
这只能在VBS中实现还是有其他方式?
代码列格式化为文本。如果我将值3输入LEFT,则它不适用于两位数。无论如何我可以使它适用于1,2和3位数代码吗?代码也不重叠,例如,代码表中不会有96和965.
答案 0 :(得分:2)
七个嵌套的IF作为限制指向一个非常旧版本的Excel。您可能需要考虑升级到本千年仍然支持的版本。
但是您的主要问题是查找值的数据类型是文本,因为您将字符串与通配符连接在一起。而您的查找表的第一列可能由数字组成。
为了解决这个问题,您需要在查找表中添加一个Text列,将数值表示为文本值。
如果要使用Vlookup,那么帮助列将需要是查找范围的第一列。
您可以使用索引/匹配而不是Vlookup独立于列顺序,如此屏幕截图所示:
H列显示已在G列中应用的公式。
编辑:
根据您发布的屏幕截图,您希望从E到F列的表格中查找,此表格只有短代码。因此,向查找值添加通配符是没有意义的。您只需要提取要用于查找的值。
如果您只想查找两位数字,则只需要提取两位数字。添加通配符不会删除第三个数字。
在下面的屏幕截图中,帮助列为LEFT()函数提供要提取的字符数,然后在VLookup中使用该值。
=VLOOKUP(LEFT(A1,B1),$E$1:$F$5,2,FALSE)
答案 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以抵消标题)。
答案 2 :(得分:1)