Excel vlookup对阵数组

时间:2015-08-13 23:28:17

标签: excel excel-formula

我想搜索数组$ A:$ B的正确5个字符作为C列中的值,并返回A列的连接值,“。”和B栏。

00010025     0     10025     00010025.0
00010026     0     10026     00010026.0
00010027     0     10027     00010027.0
00010029     0     10028     NoMatch
00010055     1     10054     NoMatch
00010101     1     10101     00010101.1
00010102     1     10102     00010102.1

如果ColumnC中的值具有前导零,则此方法有效。但是,“原始”数据只有5个字符。

=IF(ISERROR(VLOOKUP($D12,$A:$B,2,FALSE)),0,CONCATENATE($D12,".",VLOOKUP($D12,$A:$B,2,FALSE)))

4 个答案:

答案 0 :(得分:0)

如果A列和C列之间的唯一差异是前导0,那么您的公式可能是=C2&vlookup(text(C2,"00000000"),A:B,2,0)

或者只在A列上运行Text To Columns。

答案 1 :(得分:0)

首先,替换IFERROR functionIf(ISERROR(...。它大大减少了代码。

当您连接数字时,最终会得到一个看起来像数字的字符串。这通常不是首选的情况。

enter image description here

产生看起来像D2中的数字的字符串的公式是

=IFERROR(RIGHT("000000" & VLOOKUP(VALUE(C2),A:B, 1, FALSE), 8)&CHAR(46)& VLOOKUP(VALUE(C2),A:B, 2, FALSE), "No Match")

产生实际数字的公式(但使用 00000000.0 的自定义数字格式化掩码在E2中显示前导零是

=IFERROR(VALUE(VLOOKUP(VALUE(C2),A:B, 1, FALSE)&CHAR(46)& VLOOKUP(VALUE(C2),A:B, 2, FALSE)), "No Match")

请注意,默认情况下,D列中的结果是左对齐的。这表示文字。 E列中的实际数字是右对齐的。

根据需要填写。

答案 2 :(得分:0)

如果A和C中的值是带前导零的数字,那么其他答案真的很好,但如果它们是最后五个字符碰巧匹配的文本值(如订单号或其他内容),那该怎么办呢?假设C中的值和A中的值不同但恰好匹配最后5个字符,请尝试:

如果您将此作为数组公式(Control-Shift-Enter)输入D1,它将返回A中与C中的nalue匹配的行号数组或0表示不匹配的行:

=IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0)

这意味着这将返回A中与C中的值匹配的最后一行,如果没有匹配则返回0:

=MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0))

那么我们可以这样做,如果它与C中的值相匹配,则从A返回值:

=INDEX(A:A,MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0)))

我们可以这样做,为与C中的值匹配的行返回A和B的连接:

=INDEX(A:A,MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0)))&"."&INDEX(B:B,MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0)))

然后唯一要担心的是如果返回0则让它说NoMatch:

=IF(MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0))=0,"NoMatch",INDEX(A:A,MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0)))&"."&INDEX(B:B,MAX(IF(RIGHT(C1,5)=RIGHT(A:A,5),ROW(A:A),0))))

但是等等。电子表格中有一百万行,因此您不希望使用A:A和B:B,除非您希望永久计算。而是使用$ A $ 1:$ A $ 100和$ B $ 1:$ B $ 100(或类似的东西取决于你有多少行):

=IF(MAX(IF(RIGHT(C1,5)=RIGHT($A$1:$A$100,5),ROW($A$1:$A$100),0))=0,"No Match",INDEX($A$1:$A$100,MAX(IF(RIGHT(C1,5)=RIGHT($A$1:$A$100,5),ROW($A$1:$A$100),0)))&"."&INDEX($B$1:$B$100,MAX(IF(RIGHT(C1,5)=RIGHT($A$1:$A$100,5),ROW($A$1:$A$100),0))))

所以在D1中输入它作为一个数组公式,按Control-Shift-Enter,你可以将它复制到每个具有C值的行。如果不使用A:A和B,计算速度会快得多。 :B并产生这个:

XYZ$WERTY    1      98712345    987612345.7
 76523456    2      87623456    76523456.2
987612345    3       6534567    65434567.4
 65434567    4      65445678    654345678.5
654345678    5     654356789    No Match
 21678901    6      43267890    No Match
987612345    7    ABC-QWERTY    XYZ$WERTY.1

答案 3 :(得分:0)

=IFERROR(VLOOKUP("*"&C1,$A:$B,1,FALSE)&"."&VLOOKUP("*"&C1,$A:$B,2,FALSE),"NoMatch")

此功能使用VLOOKUP表示最右边的字符(如果您的数字/字符串为8位数,那么就不是五个字符,然后是那么长)。
如果找到匹配项,则返回连接的内容,否则返回NoMatch字符串。

00010025    0   10025   00010025.0
00010026    0   10026   00010026.0
00010027    0   10027   00010027.0
00010029    0   10028   NoMatch
00010055    1   10054   NoMatch
00010101    1   10101   00010101.1
00010102    1   10102   00010102.1
              00010029  00010029.0
               0010102  00010102.1