如图,在B13中输入公式:
=INDEX($B$2:$B$7,SMALL(IF($A$2:$A$7=$A13,ROW($A$1:$A$6)),COLUMN(A1)),)
输入完,注意:按CTRL+SHIFT+ENTER 结束
然后右拉 下拉即可!
追问不好意思,多谢了。
数据透视表
追问我需要把最后课程的结果按照数学、英语 这种方式放在一个单元格里,因为需要复制到其他地方。
追答课程 最多有几课?
追问最多可能有十课
追答可以了 vba 代码如下
用之前先按人名排下序
Sub jk()
Dim i, j, k, l$
i = [a65536].End(3).Row
Cells(1, 3).Select
j = 2
Do While j <= i
l = Cells(j, 2)
Do While Cells(j, 1) = Cells(j + 1, 1)
l = l & "、" & Cells(j + 1, 2)
j = j + 1
Loop
Selection = Cells(j, 1)
Selection.Offset(0, 1) = l
Selection.Offset(1, 0).Select
j = j + 1
Loop
End Sub
相同的单元格里,用、分隔。
追答你应该有VBA的基础吧,如下代码可解决你的问题。
假设你的原始数据在表Tem,姓名在A列,课程在B列,整理后的数据在表Program,
先手工完成如下步骤:
在Tem表对A列排序
将排序后的A列数据拷贝到Program,将重复的数据清楚,可用数据透视表或公式,
如用公式可在B列写 =a2=a3,填充后将值为True的内容清理掉即可,然后用如下代码来执行,
sub test()
For i = 2 To Application.CountA(Range("a:a"))
If Cells(i - 1, 1) <> Cells(i, 1) Then
pox = Application.Match(Cells(i, 1), Sheets("Program").Range("a:a"), 0)
Sheets("Program").Cells(pox, 2) = Cells(i, 2)
Else
Sheets("Program").Cells(pox, 2) = Sheets("Program").Cells(pox, 2) & "、" & Cells(i, 2)
End If
Next
end sub
追问不好意思,多谢了。