Алгоритм PercentRank в VBA
Я нашел ответ на вопрос "Как назначить порядковый номер для массива, когда есть связи" в Php и (выглядело lilke) C++. Я также нашел пару ответов о Excel PercentRank на языке, который я не знаю.
Может кто-нибудь помочь мне сделать это в VBA? Мне нужно рассчитать PercentRank из 12 значений в Access для отчета, и я не могу использовать Excel. Вот пример того, что я после:
Per Val %Rank
01 80 0.82
02 74 0.45
03 88 1.00
04 60 0.00
05 86 0.91
06 68 0.18
07 64 0.09
08 78 0.64
09 76 0.55
10 72 0.27
11 78 0.64
12 72 0.27
Обратите внимание, что для периодов 08 и 11 значение одинаково. Также для периода 10 и 12. Я где-то читал, что когда есть связи, функция должна вычислять среднее значение некоторой сортировки.
Кто-нибудь, пожалуйста, помогите с функцией, написанной на VBA?
Огромное спасибо.
Д. Ламарш
1 ответ
Галстуки должны давать такой же процентный ранг, как показано в вашем примере. Если ваш номер х не находится в массиве, то вы должны экстраполировать. Если вы уверены, что х находится в массиве, вы можете упростить до этого
Public Function PRank(vaArray As Variant, x As Variant) As Double
Dim lLower As Long
Dim lHigher As Long
Dim i As Long
For i = LBound(vaArray, 1) To UBound(vaArray, 1)
If vaArray(i, 1) < x Then
lLower = lLower + 1
ElseIf vaArray(i, 1) > x Then
lHigher = lHigher + 1
End If
Next i
PRank = lLower / (lLower + lHigher)
End Function
Если вы передадите значения x, которых нет в vaArray, это приведет к неверному результату. Кроме того, это предполагает, что вы передаете двумерный массив (как в столбце Excel), поэтому вам, возможно, придется подстроиться под это.