这个公式有点意思了。
先看MATCH(B2,B3:B12,)部分,使用MATCH函数在B列的公式下一个行开始,查找B2下一次出现的位置。
然后用INDEX函数,从D列公式所在行的下一个单元格开始,返回相同位置的内容。
接下来使用A2单元格中的订单号理解顿号以及INDEX函数部分的计算结果。
如果MATCH函数返回了错误值,说明B列的产品代码是最后一次出现,再往下就没有这个产品代码了。
这时候再使用IFERROR函数来屏蔽错误,如果前半部分的公式出现错误,就让他返回A列的订单号。
当公式在D2输入时,由于D2往下还没有内容,所以这时候只返回一个“CX-1903-021、”,但是随着公式不断往下复制,后面的公式结果会被前面的公式再次利用,前面公式合并的字符会越来越多,直到将所有符合条件的订单全部合并。
为了便于大家理解,咱们暂时保留B列一种产品代码,看看公式的计算过程:
No.1:先看D11单元格,MATCH函数从B列下一行(第12行)开始找不到与B11相同的产品代码了,所以会得到一个错误值。这时候IFERROR函数发挥作用,让公式直接返回A列的订单号CX-2107-048。
No.2:再看D8单元格,MATCH函数从B列下一行(第9行)开始,查找到与B8相同的产品代码位置,然后使用INDEX函数返回D列对应的订单号,也就是得到D11单元格中的内容。(注意,从这一步开始,后面的公式结果开始被前面的公式继续使用了)。
接下来用A8的订单号与D11的订单号连接到一起,变成了CX-2103-036、CX-2107-048。
No.3:D4和D2单元格也是相同的过程,先找到公式所在行的下一个合并结果,然后使用A列的订单号与之连接,就像滚雪球一样,这个编码被逐步合并,越来越长……
第二步:
在汇总表的C2单元格输入以下公式 ,向下复制,OK。
=VLOOKUP(A2,订单!B:D,3,0)
这个公式没啥可解释的了,就是使用VLOOKUP函数,以A2单元格的产品代码为查找值,在汇总表的B列查询产品代码,并返回D列(也就是刚刚咱们用公式得到的那些字符)对应的内容。
虽然汇总表的B列有多个相同的产品代码,但是VLOOKUP函数只返回第一个符合条件的记录,而这个记录,恰好是订单号合并的最完整的那一个。
图文制作:祝洪忠