Vba 使用响应';答案';查找列中的百分比

Vba 使用响应';答案';查找列中的百分比,vba,excel,macros,standard-deviation,Vba,Excel,Macros,Standard Deviation,该代码当前要求用户输入两个独立的数字,并将它们分开,然后在消息框中弹出答案。接下来我要做的是使用这个答案,并计算出我的工作簿中“T”列中的百分比 If response = vbNo Then Dim cost, weight, answer As Variant cost = InputBox("Please Enter PO Cost") weight = InputBox("Please Enter Net Weight") ans

该代码当前要求用户输入两个独立的数字,并将它们分开,然后在消息框中弹出答案。接下来我要做的是使用这个答案,并计算出我的工作簿中“T”列中的百分比

 If response = vbNo Then
    Dim cost, weight, answer As Variant
        cost = InputBox("Please Enter PO Cost")
        weight = InputBox("Please Enter Net Weight")
        answer = cost / weight
        MsgBox "Price per KG is: " & answer
        Exit Sub 

您可以使用百分位工作表函数,如下所示

Public Sub Percentile()
    Dim myrng As Range

    Set myrng = Range("t1:t10") 'set the range
    mypercentile = WorksheetFunction.Percentile(myrng, 0.9) ' Retrieve the 90th percentile from t1:t10
    MsgBox ("The percentile is " & mypercentile)
End Sub

您可以使用百分位工作表函数,如下所示

Public Sub Percentile()
    Dim myrng As Range

    Set myrng = Range("t1:t10") 'set the range
    mypercentile = WorksheetFunction.Percentile(myrng, 0.9) ' Retrieve the 90th percentile from t1:t10
    MsgBox ("The percentile is " & mypercentile)
End Sub

您可以使用Excel内置的Percentrank函数。我假设t列中没有空格

Dim x as double
Set ws= ActiveWorkbook.Worksheets("Sheet1")
Set relevant_array = ws.Range(ws.Range("T1"),ws.Range("T1").End(xlDown))
x = WorksheetFunction.Percentrank(relevant_array.Address,answer)
debug.print x

您可以使用Excel内置的Percentrank函数。我假设t列中没有空格

Dim x as double
Set ws= ActiveWorkbook.Worksheets("Sheet1")
Set relevant_array = ws.Range(ws.Range("T1"),ws.Range("T1").End(xlDown))
x = WorksheetFunction.Percentrank(relevant_array.Address,answer)
debug.print x

你好,cam,我只是想澄清一下,如果您考虑的是最低的10%,那么如果值列表是(1,2,3,…,10),您期望的是0.1还是1?@yarnspiner我期望的是0.1…这段代码的最终目标是从除法问题中得到答案,并检查以验证答案是否在列上所有值的特定范围内因此,我的解决方案是显示答案在“T”列中的百分比,告诉用户他们的答案是否接近该列的平均值。此时,您要查找的是WorksheetFunction.Percentrank。在本例中,它接受一个数组和一个值,然后返回0.1%。百分位是相反的,u在数组中传递,0.1返回1。你好,cam,我想澄清一下,如果你考虑的是最低的10%,你是期望0.1还是1,如果值列表是(1,2,3,…,10)?@Yarnsinner我期望0.1…这段代码的最终目标是从除法问题中得到答案,并检查以验证答案是否在“T”列上所有值的特定范围内。因此,我的解决方案是显示答案在“T”列中的百分比,告诉用户他们的答案是否接近该列的平均值。此时,您要查找的是WorksheetFunction.Percentrank。在本例中,它接受一个数组和一个值,然后返回0.1%。Percentile是相反的,数组中的u传递和0.1返回1。我正在尝试重新编写此代码,以便为我工作,我在最后一行不断收到错误,表示它需要一个“=”,或者当我将其设置为某个值时,它会说“不允许分配到常量”。抱歉,这应该是我的错误。这是一个工作表函数,因此它不接受VBA范围,而是需要一个字符串。如果您将其更改为“T1:T500”或相关的_array.Address,则应能正常工作。对不起,我现在没有Excel,所以无法检查。等等,不,进一步阅读后情况就不是这样了。我不太确定是什么导致了这个错误。@cam,好的,新代码应该可以正常工作。实际的错误是percentrank返回了一个需要分配给变量的值。我在代码中将x声明为变量,现在它运行良好。感谢您在这方面所做的工作。这段代码看起来很棒,应该可以正常工作,现在我发现了错误“无法获取工作表函数类的PercentRank属性。我相信这是我的excel设置的问题,而不是你的代码。@cam,可能是你传入的答案没有被视为数值。显然,根据,该错误的一个常见原因是将意外的数据类型传递到函数中。您可以尝试debug.print answer和TypeName(answer)来检查这一点。我正在尝试重新编写此代码,以便为自己工作,但我在最后一行不断遇到错误,说它需要一个“=”,或者当我将其设置为某个值时,它会说“不允许为常量赋值”。抱歉,这应该是我的错误。这是一个工作表函数,因此它不接受VBA范围,而是需要一个字符串。如果您将其更改为“T1:T500”或相关的_array.Address,则应能正常工作。对不起,我现在没有Excel,所以无法检查。等等,不,进一步阅读后情况就不是这样了。我不太确定是什么导致了这个错误。@cam,好的,新代码应该可以正常工作。实际的错误是percentrank返回了一个需要分配给变量的值。我在代码中将x声明为变量,现在它运行良好。感谢您在这方面所做的工作。这段代码看起来很棒,应该可以正常工作,现在我发现了错误“无法获取工作表函数类的PercentRank属性。我相信这是我的excel设置的问题,而不是你的代码。@cam,可能是你传入的答案没有被视为数值。显然,根据,该错误的一个常见原因是将意外的数据类型传递到函数中。您可以尝试debug.print answer和TypeName(answer)来检查它。