Excel如何用VBA代码自动删除多余记录,只保留每个学员的最好成绩?

如图,比如付晓参加了三次考试,考试用时和得分各不相同。想只留下第7行他的最好成绩,把第8行、第10行的记录删除。由于每次考完试都要如此整理数据,所以想用VBA代码自动处理。

第1个回答  2020-03-04
Sub nn()
Dim arr, brr, crr, r, i, j, zd As Object, m, n
r = [a65536].End(3).Row
arr = Range("a2:g" & r)
Set zd = CreateObject("scripting.dictionary")
For i = 1 To UBound(arr)
arr(i, 5) = Val(Application.Substitute(Application.Substitute(arr(i, 5), "'", "."), """", ""))
zd(arr(i, 1)) = i
Next
ReDim drr(1 To zd.Count, 1 To 7)
brr = zd.items
crr = zd.keys
For j = 1 To zd.Count
n = brr(j - 1)
For i = 1 To UBound(arr)
If crr(j - 1) = arr(i, 1) And (arr(n, 7) < arr(i, 7) Or _
(arr(n, 7) = arr(i, 7) And arr(n, 5) > arr(i, 5))) Then
n = i
End If
drr(j, 1) = n
Next
Next
For i = 1 To zd.Count
m = drr(i, 1)
For j = 1 To 7
If j = 5 Then
drr(i, j) = Application.Substitute(Format(arr(m, j), "0.00"), ".", "'") & """"
Else
drr(i, j) = arr(m, j)
End If
Next
Next
Range("k1").Resize(1, 7) = [a1:g1].Value
Range("k2").Resize(UBound(drr), 7) = drr
MsgBox "筛选完成!", , "恭喜:"
End Sub本回答被提问者采纳
第2个回答  2020-03-04
用排序+函数+辅助列等方法可以处理。用VBA当然也可以。
最好成绩是得分最大吗?如果得分相同是以用时最短吗?追问

是的。
每个学员都是先看得分,留最高的;如果最高分相同,留考试用时短的。
人工排序、删除的办法太繁琐,容易出错。
VBA可以全自动处理,省时省力。

第3个回答  2020-03-04
建立渠道传送数据和代码
相似回答