Как наилучшим образом преобразовать процент в результат в Excel?

#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)