#excel #vba
#excel #vba
Вопрос:
Мне нужно преобразовать процент в систему подсчета очков в Excel 2003, либо используя встроенную формулу (предпочтительнее), либо написав пользовательскую функцию в VBA. Формула или функция должны принимать параметр, позволяющий указать максимальный балл.
Например, предположим, что есть вызываемая функция Pct2Score(Pct As String, MaxScore As Integer)
, которая делает именно это.
Pct2Score («65%», 4) вернет 3, потому что он будет использовать это распределение:
0%-24.9% = 1
25-49.9% = 2
50-74.9% = 3
75-100% = 4
Pct2Score («65%», 5) вернет 4, потому что он будет использовать это распределение:
0-19.9% = 1
20%-39.9% = 2
40-59.9% = 3
60-79.9% = 4
80-100% = 5
И так далее и тому подобное. Я надеюсь, что в Excel есть встроенная формула распределения, которая делает именно это, чтобы мне не приходилось полагаться на VBA. Для достижения этой цели даже можно использовать комбинацию формул; единственное ограничение заключается в том, что мне нужно, чтобы все содержалось в одной формуле.
Ответ №1:
Простая формула (описательная, а не Excel) просто:
1 INT((Pct AS DOUBLE) * MaxScore / 100).
Использование VBA:
Public Function Pct2Score(pct As String, MaxScore As Integer) As Integer
Dim pctD As Double
If (Right(pct, 1) = "%") Then pct = Left(pct, Len(pct) - 1)
pctD = CDbl(pct)
Pct2Score = 1 Int(pctD * MaxScore / 100)
End Function
С помощью одной формулы вы можете сделать
=1 INT(A1*B1)
где A1 — Pct, а B1 — maxScore.
Комментарии:
1. Привет, Марко, 1 INT(.65 * 100/4) = 17 и 1 INT(.65 * 100/5) = 14. Они должны возвращать 3 и 4 соответственно.
2. @10basetom: нет, это не формула. Это
1 INT(65*5/100)
или1 INT(.65*5)
3. Я думаю, что прочитал ваш ответ во время его публикации, поэтому использовал неверную информацию. Как только я увидел вашу окончательную формулу, все сработало как по волшебству. Спасибо за быстрый ответ; Я чувствую себя таким тупым, увидев, насколько проста формула (DOH!).
4. Я просто хотел бы указать на одну незначительную проблему, с которой я столкнулся: если процент равен 100%, то результирующая оценка будет на единицу больше максимальной оценки. Чтобы учесть это, я просто вычел 0,001 из процентиля, например:
1 INT((1-.001)*5)