Формула пользовательского счета Excel VBA - PullRequest
0 голосов
/ 15 ноября 2018

Добрый день, я пытаюсь создать функцию в Excel, которая оценивает число на основе 4 других чисел, я работаю над картой показателей для бюджета, поэтому я пытаюсь выполнить следующее:

У меня есть таблица со следующими таблицами enter image description here

Теперь у меня есть 4 столбца (от K до N) «Скрытые» со значениями 157, 143, 128, 114 в них. Я хочу создать формулу, которая принимает значение в A5 и сравнивает их с другими четырьмя столбцами и помещает результат в столбец J. Например, я бы поместил следующую формулу в J5

Ячейка J5 = Оценка (A5, K5, L5, M5, N5)

Чтобы получить оценку Я создал следующий код VBA:

Public Function Score(A As Integer, S1 As Integer, S2 As Integer, S3 As Integer, S4 As Integer) As String

    If A < S1 Then
        Score = "1"
    ElseIf S1 + 1 <= A < S2 Then
        Score = "2"
    ElseIf S2 + 1 <= A < S3 Then
        Score = "3"
    ElseIf S3 + 1 <= A < S4 Then
        Score = "4"
    ElseIf S4 + 1 <= A Then
        Score = "5"
    End If

End Function

Может кто-нибудь сказать мне, где я иду не так? Когда я использую формулу, я получаю #NUM ошибку

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Я наконец понял это.Сначала я забыл, что я работаю с числами в миллионах, поэтому Integer не работал, мне пришлось использовать long, я получил результат, но не правильный, поэтому я решил попытаться установить диапазоны между ними.Вот мой результат: функция предусматривает, что чем ниже А, тем лучше рейтинг

Public Function ScoreDown(A As Long, S1 As Long, S2 As Long, S3 As Long, S4 As Long) As String

 If A > S1 Then
        Score = "1"
    ElseIf S1 >= A And A > S2 Then
            Score = "2"
    ElseIf S21 >= A And A > S3 Then
        Score = "3"
    ElseIf S3 >= A And A > S4 Then
        Score = "4"
    ElseIf S4 >= A Then
        Score = "5"
    End If


End Function
0 голосов
/ 15 ноября 2018

Самое простое решение - по моему мнению, и если решение без VBA в порядке - это вставить еще один скрытый столбец перед вашим столбцом K и ввести любое очень большое число (просто убедитесь, что ваши значения в столбце A всегда будут ниже этого значения).

Затем введите следующую формулу в J3:

=MATCH(A3,K3:O3,-1)
0 голосов
/ 15 ноября 2018

Хорошая попытка, если это одна из ваших первых попыток. Вы должны указать возвращаемое значение вашей функции - As String в конце первой строки.

Public Function Score() As String

    Dim iRow As Integer

    iRow = Application.Caller.Row
    A = Range("$A$5")
    S1 = Range("$K" & iRow)
    S2 = Range("$L" & iRow)
    S3 = Range("$M" & iRow)
    S4 = Range("$N" & iRow)

    If A < S1 Then
        Score = "1"
    ElseIf S1 + 1 <= A < S2 Then
        Score = "2"
    ElseIf S2 + 1 <= A < S3 Then
        Score = "3"
    ElseIf S3 + 1 <= A < S4 Then
        Score = "4"
    ElseIf S4 + 1 <= A Then
        Score = "5"
    End If

End Function

Если вы хотите самостоятельно выбрать пять ячеек для функции, например =score(A5,F10, G10, H10, E10) и т. Д.

Public Function Score(A As Integer, S1 As Integer, S2 As Integer, S3 As Integer, S4 As Integer) As String

    If A < S1 Then
        Score = "1"
    ElseIf S1 + 1 <= A < S2 Then
        Score = "2"
    ElseIf S2 + 1 <= A < S3 Then
        Score = "3"
    ElseIf S3 + 1 <= A < S4 Then
        Score = "4"
    ElseIf S4 + 1 <= A Then
        Score = "5"
    End If

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...