如何在Excel中最好地将百分比转换为分数?

如何在Excel中最好地将百分比转换为分数?,excel,vba,Excel,Vba,我需要在Excel2003中将百分比转换为评分系统,或者使用内置公式(最好)或者在VBA中编写自定义函数。公式或函数必须接受允许我指定最大分数的参数 例如,假设有一个名为Pct2Score的函数(Pct作为字符串,MaxScore作为整数)就是这样做的 Pct2Score(“65%”,4)将返回3,因为它将使用此分布: 0%-24.9% = 1 25-49.9% = 2 50-74.9% = 3 75-100% = 4 0-19.9% = 1 20%-39.9% = 2 40-59.9% =

我需要在Excel2003中将百分比转换为评分系统,或者使用内置公式(最好)或者在VBA中编写自定义函数。公式或函数必须接受允许我指定最大分数的参数

例如,假设有一个名为
Pct2Score的函数(Pct作为字符串,MaxScore作为整数)
就是这样做的

Pct2Score(“65%”,4)将返回3,因为它将使用此分布:

0%-24.9% = 1
25-49.9% = 2
50-74.9% = 3
75-100% = 4
0-19.9% = 1
20%-39.9% = 2
40-59.9% = 3
60-79.9% = 4
80-100% = 5
Pct2Score(“65%”,5)将返回4,因为它将使用此分布:

0%-24.9% = 1
25-49.9% = 2
50-74.9% = 3
75-100% = 4
0-19.9% = 1
20%-39.9% = 2
40-59.9% = 3
60-79.9% = 4
80-100% = 5
等等。我希望Excel中有一个内置的分布公式可以做到这一点,这样我就不必依赖VBA了。甚至可以使用一组公式来实现这一点;唯一的限制是我需要所有内容都包含在一个公式中。

一个简单的公式(描述性的,而不是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。

Hi Marco,1+INT(.65*100/4)=17,1+INT(.65*100/5)=14。他们应该分别返回3和4。@10basetom:不,这不是公式。它是
1+INT(65*5/100)
1+INT(.65*5)
我想我在你的答案发布时读到了,所以我使用了错误的信息。一旦我看到你的最终公式,一切都像一个魅力。感谢您提供了一个快速的答案;看到这个公式有多简单,我觉得自己太傻了(DOH!)。我只想指出我遇到的一个小问题:如果百分比为100%,那么结果分数将比最高分数高一分。为了说明这一点,我只需从百分位数中减去.001,例如:
1+INT((1-.001)*5)