I'm a teacher. I use Excel to keep a record of my students' grades. Here's my question.

Let's say I have 20 grades for a student's assignments in one row. In another row I have the number of points possible on each assignment.

I want to average the student's assignment grades, making each assignment worth the same amount regardless of the number of points. I also want to drop the three lowest grades in percentage terms. So if the student made 9/10 on one assignment and 15/20 on another, I want to drop the 15/20 grade.

I have written a Visual Basic subroutine to do this, but it's clunky. There must be a better way.

Any suggestions on the simplest, most elegant way to accomplish this task?

Thanks in advance