题目很拗口,主要是想要表达的东西比较曲折,还是以实例来说明比较直观,假设在Access中有以下的表table1。table1是一张成绩表,我想要的结果是:所有人的成绩按着总分(Score)从大到小排列,然后在排列好的表中从上到下累加English/Score列(第1行+第2行+……+第N行的值),当累加值>0.7时,取出第1行到第N行的记录。

Name English Frence Chinese Score Proportion   (English/Score)
Jasmine 81 40 100 220 0.37
Hill 70 80 60 210 0.33
Jay 80 20 80 180 0.44
Tom 50 50 50 150 0.33

VBA的代码思路是:先把Table1按总分(Score)从大到小排列取出来放在记录集中,然后通过循环累加Proportion的值,取出符合条件的行数,最后从记录集中取出所需的内容。

代码如下:

Sub LookupSum()
   Dim rst As Recordset   
   Dim MARK As Double
   Dim values AS Double '阀值
   Dim num As Double    '行数
   Dim qdf As QueryDef  '查询
   Dim strSQL As String
 
   MARK = 0
   num= 0
   values = 0.7
   '从大到小排列取出来放在记录集中
   Set rst = CurrentDb.OpenRecordset(" select * from table1 order by Score desc")
   '循环累加Proportion的值
   Do While Not rst.EOF
      If MARK >= values Then Exit Do
          MARK = MARK + rst! Proportion
          num = num + 1
          rst.MoveNext
   Loop
  '新建一个查询
   strSQL = "select top "  & num & " * from table1 order by Score desc"
   Set qdf = CurrentDb.CreateQueryDef("查询累计比例大于70%的成绩", strSQL)
   DoCmd.OpenQuery qdf.Name
End Sub