我学VBA:不及格人员名单及成绩


  要求:根据成绩系统导出的I列学生成绩,统计出不及格学生的姓名与成绩,在K1单元格为起点进行显示。

  代码:

  Sub 不及格人员统计()

  Dim Arr1(), Arr2(): Rem 声明两个数组

  Dim Maxrows As Integer

  Maxrows = Range("A65536").End(xlUp).Row: Rem 确定最大行数

  Arr1 = Range("A2:I" & Maxrows): Rem 第一个数组的区域大小;

  Dim N As Integer

  N = Application.WorksheetFunction.CountIf(Range("I2:I" & Maxrows), "<60"): Rem 统计不及格人数,以确定第2数组的行数大小;

  Dim Nrows As Integer

  Dim tim As Long

  tim = Timer

  ReDim Arr2(1 To N, 1 To 2): Rem 重置第二个数组的大小,只需有姓名,成绩两列,按不及格人数确定行数;

  MsgBox UBound(Arr2, 1): Rem 验证第二个数组的最大上标,是否为不及格人数;

      For CJ1 = 2 To Maxrows - 1 Step 1

          Arr1(CJ1, 9) = CDec(Arr1(CJ1, 9)): Rem 因为成绩从系统中导出,为非数字格式,需转换为其数据格式;

          If Arr1(CJ1, 9) < 60 Then

              Nrows = Nrows + 1

              Arr2(Nrows, 1) = Arr1(CJ1, 3): Rem 姓名

              Arr2(Nrows, 2) = Arr1(CJ1, 9): Rem 成绩

          End If

      Next

  Range("K1").Resize(N, 2) = Arr2: Rem 在K1单元格为起点显示不及格人员姓名及成绩

  MsgBox Format(Timer - tim, "0.00秒")

  End Sub