Published on October 10th 2023 | 3 mins , 579 words
The KCSE mean grade is calculated by considering several factors. It begins with the inclusion of points from the three compulsory subjects: Kiswahili, English, and Mathematics. The scores for the fourth and fifth subjects are determined by selecting the highest two scores from the three science subjects available. The sixth subject's score is derived from the best-performing humanity subject. Lastly, the seventh subject's score is determined by choosing the highest value among the second-best humanity subject, the third science subject, and any technical subject completed.
Here is the VBAcode that does the selection:
Private Sub ProcessData()
Dim shData As Worksheet
Dim shSubpos As Worksheet
Dim shSubGrade As Worksheet
Dim gradeSys As Worksheet
Dim shBroad As Worksheet
Dim subp As Worksheet
Dim lrow As Long
Dim i As Long, j As Long
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
Set subp = ThisWorkbook.Sheets("subpoints")
Set gradeSys = ThisWorkbook.Sheets("gradingSystem")
Set shData = ThisWorkbook.Sheets("DATA")
Set shSubpos = ThisWorkbook.Sheets("SUBJECTPOSITION")
Set shSubGrade = ThisWorkbook.Sheets("SUBJECT GRADE")
Set shBroad = ThisWorkbook.Sheets("BROADSHEET")
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
lrow = shData.Cells(shData.Rows.Count, "A").End(xlUp).Row
For j = 3 To 14
For i = 3 To lrow
Dim cell As Range
Set cell = shData.Cells(i, j)
' Copy cell A and B
shSubGrade.Cells(i, 1).Resize(, 2).Value = shData.Cells(i, 1).Resize(, 2).Value
subp.Cells(i, 1).Resize(, 2).Value = shData.Cells(i, 1).Resize(, 2).Value
shBroad.Cells(i, 1).Resize(, 2).Value = shData.Cells(i, 1).Resize(, 2).Value
' Copy the respective subject grades
For Each subject In Array("eng", "maths", "kis", "bio", "chem", "phy", "kis", "geog", "hist", "comp", "agric", "bst")
Set gradeRange = gradeSys.Range(subject)
If IsEmpty(shData.Cells(i, j)) Then
shSubGrade.Cells(i, j).Value = "X"
Else
shSubGrade.Cells(i, j).Value = wf.VLookup(cell, gradeRange, 2)
End If
Next subject
' Map grades to points
Dim grade As String
grade = shSubGrade.Cells(i, j).Value
Select Case grade
Case "A": subp.Cells(i, j).Value = 12
Case "A-": subp.Cells(i, j).Value = 11
Case "B+": subp.Cells(i, j).Value = 10
Case "B": subp.Cells(i, j).Value = 9
Case "B-": subp.Cells(i, j).Value = 8
Case "C+": subp.Cells(i, j).Value = 7
Case "C": subp.Cells(i, j).Value = 6
Case "C-": subp.Cells(i, j).Value = 5
Case "D+": subp.Cells(i, j).Value = 4
Case "D": subp.Cells(i, j).Value = 3
Case "D-": subp.Cells(i, j).Value = 2
Case "E": subp.Cells(i, j).Value = 1
Case Else: subp.Cells(i, j).Value = ""
End Select
Next i
Next j
' Calculate and populate the rest of the data as needed
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Private Sub btnProcessResults_Click()
ProcessData
subjectRank
grade
broadsheet
analyzeGrade
shBroad.UsedRange.EntireColumn.AutoFit
Application.AutoRecover.Enabled = False
End Sub
Private Sub CommandButton1_Click()
ProcessData
subjectRank
grade
broadsheet
analyzeGrade
shBroad.UsedRange.EntireColumn.AutoFit
Application.AutoRecover.Enabled = False
End SubThere are three main methods here:
ProcessData:
It begins by assigning a letter grade to the marks per subject entered in excel worksheet then from letter grade points are awarded based on a grading system.
shSubGrade.Cells(i, j).Value = wf.VLookup(cell, gradeRange, 2)
Thereafter, the top seven subjects are selected based on points. It includes the accumulation of points for these chosen subjects and the calculation of the total marks attained across the seven subjects. In simpler terms, this process identifies the most favorable subjects, adds up their points, and determines the overall marks achieved in those seven subjects. Here the VBA code for processing data: