码迷,mamicode.com
首页 > 编程语言 > 详细

20181013xlVba计算优秀率及合格率

时间:2018-10-13 21:43:12      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:double   vba   .text   text   deb   clear   tar   each   end   

Sub 计算高一优秀合格率()
    Dim Wb As Workbook
    Dim Sht As Worksheet
    Dim oSht As Worksheet
    Dim dOs As Object ‘OutStanding
    Const SUBJECTS = "语文数学英语物理化学生物政治历史地理"
    Set dOs = CreateObject("Scripting.Dictionary")
    Set Wb = Application.ThisWorkbook
    Set Sht = Wb.Worksheets("年级_本次成绩总表")
    
    With Sht
        EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
        EndCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
        For j = 4 To EndCol
            If InStr(SUBJECTS, .Cells(1, j).Text) > 0 Then
                Subject = .Cells(1, j).Text
                For i = 2 To EndRow
                    If .Cells(i, "Y").Value = "" Then
                    goal = .Cells(i, j).Value
                    Cls = .Cells(i, 3).Value
                    Key = Cls & ";" & Subject
                    If goal <> "" Then
                        If Not dOs.exists(Key) Then
                            If goal >= OsLine(Subject, 1) Then
                                os = 1
                            Else
                                os = 0
                            End If
                            If goal >= OsLine(Subject, 2) Then
                                pass = 1
                            Else
                                pass = 0
                            End If
                            dOs(Key) = Array(1, os, pass)
                        Else
                            Ar = dOs(Key)
                            Ar(0) = Ar(0) + 1
                            If goal >= OsLine(Subject, 1) Then Ar(1) = Ar(1) + 1
                            If goal >= OsLine(Subject, 2) Then Ar(2) = Ar(2) + 1
                            dOs(Key) = Ar
                        End If
                    End If
                    End If
                Next i
            End If
        Next j
    End With

    ‘For Each OneKey In dOs.keys
        ‘Ar = dOs(OneKey)
        ‘Debug.Print OneKey; "  "; Ar(0); " "; Ar(1); "  "; Ar(2)
    ‘Next
    
    
    Set Sht = Wb.Worksheets("年级_各科离均率")
    With Sht
        StartRow = 60
        ClassCount = 20
        SubjectCount = 10
        .Cells(StartRow + 1, 2).Resize(ClassCount, SubjectCount).ClearContents
        For j = 2 To SubjectCount + 1
            Subject = .Cells(StartRow, j).Value
            For i = StartRow + 1 To StartRow + 20
                Cls = .Cells(i, 1).Value
                Key = Cls & ";" & Subject
                If dOs.exists(Key) Then
                    Ar = dOs(Key)
                    .Cells(i, j).Value = Format(Ar(1) / Ar(0), "0.0%")
                End If
            Next i
        Next j
        
        
        StartRow = 84
        ClassCount = 20
        SubjectCount = 10
        .Cells(StartRow + 1, 2).Resize(ClassCount, SubjectCount).ClearContents
        For j = 2 To SubjectCount + 1
            Subject = .Cells(StartRow, j).Value
            For i = StartRow + 1 To StartRow + 20
                Cls = .Cells(i, 1).Value
                Key = Cls & ";" & Subject
                If dOs.exists(Key) Then
                    Ar = dOs(Key)
                    .Cells(i, j).Value = Format(Ar(2) / Ar(0), "0.0%")
                End If
            Next i
        Next j
        
        
        
    End With

End Sub
Function OsLine(ByVal Subject As String, ByVal Level As Long) As Double ‘Level 1优秀0合格
    Select Case Subject
    Case "语文", "数学", "英语"
        If Level = 1 Then
            OsLine = 120
        Else
            OsLine = 90
        End If
    Case Else
        If Level = 1 Then
            OsLine = 80
        Else
            OsLine = 60
        End If
    End Select
End Function

  

20181013xlVba计算优秀率及合格率

标签:double   vba   .text   text   deb   clear   tar   each   end   

原文地址:https://www.cnblogs.com/nextseven/p/9784093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!