Алгоритм 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), поэтому вам, возможно, придется подстроиться под это.

Другие вопросы по тегам