我想要代码:
对于他们的"排名B"低于"等级A",只取得得分最高的前3个,并将其与他们的分数一起放在"选择"右边的桌子。
我一直试图将它们收集到阵列中。
更新: 我使用Dy.Lee解决方案,它有效,除非我有一个大表(300行,12列),然后它在以下行失败:
我发现了问题,我在表的末尾有两个相同的列。有什么办法可以捕获这个异常?
答案 0 :(得分:1)
试试这个
Sub test()
Dim vDB, vR()
Dim i As Long, n As Long
Dim rngDB As Range
vDB = Range("a1").CurrentRegion
For i = 1 To UBound(vDB, 1)
If vDB(i, 3) > vDB(i, 4) Then
n = n + 1
ReDim Preserve vR(1 To 2, 1 To n)
vR(1, n) = vDB(i, 1)
vR(2, n) = vDB(i, 2)
End If
Next i
Range("g1").CurrentRegion.Offset(2).Clear
If n = 0 Then
MsgBox "No data matches the condition!!"
Exit Sub
ElseIf n = 1 Then
Range("g3").Resize(n, 2) = vR
Else
Range("g3").Resize(n, 2) = WorksheetFunction.Transpose(vR)
End If
Set rngDB = Range("g2").Resize(n + 1, 2)
rngDB.Sort key1:=Range("h2"), order1:=xlDescending, Header:=xlYes
rngDB.Offset(4).Clear
End Sub
答案 1 :(得分:0)
如果你对公式解决方案而不是VBA开放,你可以选择 - 在每个单元格中输入单独的数组公式(ctrl + shift + enter):
G3-G5: {=INDEX($A$2:$A$8,MATCH(1,INDEX(($B$2:$B$8=LARGE($B$2:$B$8*--($C$2:$C$8>$D$2:$D$8),ROWS(G$2:G2)))*(COUNTIF(G$2:G2,$A$2:$A$8)=0),),0))}
在H列中,作为单独的数组公式输入(ctrl + shift + enter):
H3-5: {=LARGE($B$2:$B$8*--($C$2:$C$8>$D$2:$D$8),row()-2)}
附件是一个截图,可以看到它正在使用中。一般来说,我建议不要使用VBA来解决用公式解决的问题,但这只是我。 Screenshot of result