excel 将多行变成一行

每个人的成绩次数不一样多,怎么将每个人的信息转成一行?

我希望能转成下面这样

一行显示一个学生所有科目所有成绩

如果数据很多的话可以使用VBA代码来解决,点击转置为行按钮,会出现“请选择转职的区域”,然后在工作表中选择你的数据,然后确定,完成后会出现“请选择放置的位置”,点击选择后,就将多行转职成为一行。

以下是录制的效果及执行代码


Sub hang()

Dim a, b As Object

Dim n!

Set a = Application.InputBox("请选择要转职的区域", , , , , , , 8)

Set b = Application.InputBox("请选择要放置的位置", , , , , , , 8)

    For Each c In a

        b.Offset(, n + 1 - 1) = c

        n = n + 1

    Next

End Sub


在VBA编辑窗口中新建一个模块,将代码复制到模块中,点击执行。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-24
按你贴的图(上面的图为Sheet1,下面的图为Sheet2):

A1数组公式(★同时按ctrl+shift+enter输入才有效★):
=IF(ROW(A1)>COUNTA(Sheet1!A:A),"",INDEX(Sheet1!A:A,SMALL(IF(Sheet1!$A$1:$A$25<>"",ROW($A$1:$A$25)),ROW(A1))))
向下填充

B1数组公式(★同时按ctrl+shift+enter输入才有效★):
=IF(ROW(A1)=1,IF(MOD(COLUMN(Sheet1!A1),2),Sheet1!$B$1,Sheet1!$C$1)&INT(COLUMN(Sheet1!B1)/2),IF($A1="","",IF(INT(COLUMN(Sheet1!B$1)/2)>IF($A2="",MAX(IF(Sheet1!$B$1:$B$999<>"",ROW($B$1:$B$999))),MATCH($A2,Sheet1!$A:$A,0))-MATCH($A1,Sheet1!$A:$A,0),"",OFFSET(Sheet1!$B$1,MATCH($A1,Sheet1!$A:$A,0)-2+INT(COLUMN(Sheet1!B$1)/2),MOD(COLUMN(Sheet1!B$1),2),,))))
向右、向下填充追问

真是牛人啊,我试了,前两个人可以用,第三个人就不行了,公式在,但是没有数,为什么啊?

追答

B1数组公式改为普通公式:
=IF(ROW(A1)=1,IF(MOD(COLUMN(Sheet1!A1),2),Sheet1!$B$1,Sheet1!$C$1)&INT(COLUMN(Sheet1!B1)/2),IF($A1="","",IF(ROW(A1)=COUNTA(Sheet1!$A:$A),OFFSET(Sheet1!$B$1,MATCH($A1,Sheet1!$A:$A,0)-2+INT(COLUMN(Sheet1!B$1)/2),MOD(COLUMN(Sheet1!B$1),2),,)&"",IF(INT(COLUMN(Sheet1!B$1)/2)>IF($A2="",MAX(IF(Sheet1!$B$1:$B$999"",ROW($B$1:$B$999))),MATCH($A2,Sheet1!$A:$A,0))-MATCH($A1,Sheet1!$A:$A,0),"",""&OFFSET(Sheet1!$B$1,MATCH($A1,Sheet1!$A:$A,0)-2+INT(COLUMN(Sheet1!B$1)/2),MOD(COLUMN(Sheet1!B$1),2),,)))))

本回答被提问者采纳
第2个回答  2013-01-24
这么乱。每个人的科次不一样多。得编程实现了。
相似回答