EXCEL怎么把多列内容整合到一列展示?

如图,怎么把左边的这种展示方式,批量做成右边这种

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))

下拉复制公式

可以根据产品数扩展

追问

非常感谢老师的帮助,解决了我的大问题,太感谢了!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-07-18
可以用数组公式,建立个辅助列,或直接用VBA

适合任何版本的excel
Sub aa()
Range("h2:i10000") = ""
Dim i, x, n
For i = 2 To Range("a65536").End(xlUp).Row
n = WorksheetFunction.Count(Range(Cells(i, "a"), Cells(i, "f")))
x = Range("h65536").End(xlUp).Row
arr = Cells(i, "a")
Cells(x + 1, "h").Resize(n, 1) = arr
brr = Range(Cells(i, "b"), Cells(i, "f"))
Cells(x + 1, "i").Resize(n, 1) = Application.Transpose(brr)
Next
End Sub
第2个回答  2023-08-22
选中对象按右键-选择性粘贴-转置确定就可以了
第3个回答  2023-08-22
您这个表格填写逻辑有些混乱了,建议先整理下在批量转。
相似回答