网友提问:
将左表变成右表

回答网友问题:
每当网友问我问题时,我都会尽量把我所知道的、想到的、易理解的、尽量简单的方法告诉大家。同样今天这个问题,我建议大家使用PowerQuery处理,一行代码就解决了,如下图

之所以我在ExcelVBA第二季里没有展开讲字典,同时也告诉大家,大多数情况下没有必要使用,也在第三季里对比了PowerQuery和字典操作。同样的问题还有为什么我不讲数组函数公式等。这些知识要是性价比高,我干嘛不给你讲呀?有简单的方法,你又何必难为自己?
回归正题,把A1:C7这张表,变成E1:G4这张表
建议用PQ、Access、SQL......... 唯独不应该用ExcelVBA

ExcelVBA方法如下:
Sub shishi()
Set 字典1 = CreateObject("Scripting.Dictionary")
Set 字典2 = CreateObject("Scripting.Dictionary")
arr = Range("A1").CurrentRegion
For i = 2 To UBound(arr)
字典1(arr(i, 1)) = 字典1(arr(i, 1)) & "、" & i
字典2(arr(i, 1)) = ""
Next
Range("A1:C1").Copy Range("E1")
Range("E2").Resize(字典2.Count, 1) = Application.Transpose(字典2.Keys)
brr = Range("E1").CurrentRegion
For i = 2 To UBound(brr)
字典2.RemoveAll
crr = Split(字典1(brr(i, 1)), "、")
For j = 1 To UBound(crr)
字典2(arr(Val(crr(j)), 2)) = ""
brr(i, 3) = arr(Val(crr(j)), 3) + brr(i, 3)
Next
brr(i, 2) = Join(字典2.Keys, "、")
Next
Range("E1").CurrentRegion = brr
End Sub
还可以考虑用AtuoFilter的方法,找到姓名的唯一值,分别筛选表,每次将显示的科目拼接成字符串,数值求和。(字典+数组会比AtuoFilter快一些)

ExcelVBA教程:https://www.bilibili.com/video/BV1rt4y1a72y
PowerQuery教程:https://www.bilibili.com/video/BV1oa4y1j75e