我想搜索数组$ 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)))
答案 0 :(得分:0)
如果A列和C列之间的唯一差异是前导0,那么您的公式可能是=C2&vlookup(text(C2,"00000000"),A:B,2,0)
或者只在A列上运行Text To Columns。
答案 1 :(得分:0)
首先,替换IFERROR function的If(ISERROR(...
。它大大减少了代码。
当您连接数字时,最终会得到一个看起来像数字的字符串。这通常不是首选的情况。
产生看起来像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