VBA EXCEL – 按条件selectexcels中的单元格,并在不同的范围内打印

过去几天我一直在努力。 我对这个VBA的东西有点新鲜。 我一直在尝试阅读一些在线,但我不知道我应该寻找什么。 基本上,我想要的代码是:对于他们的“等级B”低于“等级A”的关键字,应该只取前三名得分最高的成绩,并将他们连同他们的得分一起放在“选定”表格在右侧。 (见下面的例子)

在这里输入图像说明

我一直在试图把它们收集到一个数组中,但是对于我来说,处理它是非常困难的,因为我在JS和Python方面更有经验。

非常感谢你们,感谢!

更新:我用Dy.Lee解决scheme,它工作得很好,除非我有一个大表(300行,12列),然后失败,在下面的行: 在这里输入图像说明

在这里输入图像说明

我认为我明白了理由,如果B级人数超过A级的话太多(不是我知道该怎么绕过这个限制)…我能做些什么才能使之发挥作用? 也许我需要扩大数组的大小或类似的东西?

再次感谢

FUCKKKK,我发现这个问题,我在表格的最后有两个相同的列。 这就是错误的原因。 无论如何,赶上这个exception?

尝试这个

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 

如果你打开一个公式解决scheme,而不是VBA,你可以在每个单元格中input单独的数组公式(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列中,input个别数组公式(ctrl + shift + enter):

 H3-5: {=LARGE($B$2:$B$8*--($C$2:$C$8>$D$2:$D$8),row()-2)} 

附件是一个截图,看看它在使用中。 一般来说,我build议不要使用VBA的东西,你可以用公式解决,但这只是我。 结果的屏幕截图