1.构造一个辅助列G列,用来记录每个客户第一次出现的行号
G2=1
G3=COUNTA(B2:F2)+G2
2.客户名称I2=IF(ROW(A1)>COUNTA($B$2:$F$6),"",XLOOKUP(ROW(A1),$G$2:$G$6,$A$2:$A$6,,-1))
刚才构造的辅助列用上了,这里用行号(虽在I2,用A1的行号来)来引用对应的客户名称,XLOOKUP最后一个参数-1模糊查询(下一个最小的项)
当行号超过产品总数时,就留空。
3.产品J2=IF(I2="","",VLOOKUP(I2,A:G,COUNTIF(I$2:I2,I2)+1,0))
如果I列留空则也留空,否则就来引用具体的产品,这里用到COUNTIF函数来计数。
追问老师,非常感谢您的回答,您太腻害了,答案与我的问题非常贴合,非常好!
只是,老师对不起,我可能把问题想简单了,所以,上面的举例就比较简单,实际情况是比这个更复杂一些的,可以再帮我看一下吗?
就是每一个产品它其实还有数量和金额,每一个客户即使同一个产品也可能都会有不同的数量和金额。
如图这样的
以5个产品为例,为了减轻后面写公式的压力,再加一列辅助列Q(*产品数量)
Q2=COUNTA(B2,E2,H2,K2,N2)
辅助列R(*产品首行数)-跟之前一样
R2=1,R3=Q2+R2
客户名称T2=IF(ROW(A1)>COUNTA($B$2:$B$6,$E$2:$E$6,$H$2:$H$6,$K$2:$K$6,$N$2:$N$6),"",XLOOKUP(ROW(A1),$R$2:$R$6,$A$2:$A$6,,-1))
产品U2=IF($T2="","",VLOOKUP($T2,$A:$R,COUNTIF($T$2:$T2,$T2)*3-1,0))
数量V2=IF($T2="","",VLOOKUP($T2,$A:$R,COUNTIF($T$2:$T2,$T2)*3,0))
价格W2=IF($T2="","",VLOOKUP($T2,$A:$R,COUNTIF($T$2:$T2,$T2)*3+1,0))
下拉复制公式
可以根据产品数扩展
非常感谢老师的帮助,解决了我的大问题,太感谢了!