Hej!
Problemet med Rambos modell är att AAAAE ger 21 p vilket ger betyget B. Men B skulle ju kräva att alla C var uppfyllda...
Möjligtvis kan felet i din kod vara att du inte har exit function efter alla elseif. Det blir då MaxGrade som slår igenom, men å andra sidan ser det rätt ut.
Jag gjorde koden så här:
gradecount = GradeRange.Count
halfgradecount = WorksheetFunction.RoundUp(gradecount / 2, 0)
CountA = WorksheetFunction.CountIf(GradeRange, "A")
CountB = WorksheetFunction.CountIf(GradeRange, "B") + CountA
countC = WorksheetFunction.CountIf(GradeRange, "C") + CountB
CountD = WorksheetFunction.CountIf(GradeRange, "D") + countC
countE = WorksheetFunction.CountIf(GradeRange, "E") + CountD
CountF = WorksheetFunction.CountIf(GradeRange, "F")
CountBOnly = WorksheetFunction.CountIf(GradeRange, "B")
CountCOnly = WorksheetFunction.CountIf(GradeRange, "C")
CountDOnly = WorksheetFunction.CountIf(GradeRange, "D")
CountEOnly = WorksheetFunction.CountIf(GradeRange, "E")
' Först granskar vi om F eller E är uppnått
If CountF > 0 Then
GetGrade2 = "F"
Exit Function
Else
sFinishedLevel = "E" ' Alltid minst E om inte F
End If
' Nu vet vi att betyget är E och granskar om vi kan slå det
If countC > halfgradecount Then
' Om mer än hälften är C så är betyget A, B, C eller D
If CountA = gradecount Then
GetGrade2 = "A"
Exit Function
End If
' Betyget är B, C eller D
If countC = gradecount And CountA > halfgradecount Then
GetGrade2 = "B"
Exit Function
End If
' Betyget är C eller D
If countC = gradecount Then
GetGrade2 = "C"
Exit Function
Else
GetGrade2 = "D"
Exit Function
End If
Else ' Om inte C är i majoritet så nås bara E
GetGrade2 = "E"
Exit Function
End If
Call MsgBox("Hit skall vi inte komma", vbOKOnly + vbCritical, "Fel")
GetGrade2 = sFinishedLevel
mvh
Kihlman