Возвращает значение ячейки, если больше 0 - PullRequest
0 голосов
/ 06 ноября 2018

Используя вложенные формулы или VBA, я хочу вернуть оценки, которые больше 0 в каждом столбце рейтинга для всех людей. Результаты для каждого столбца должны быть прямо под последней заполненной строкой, как показано ниже: Таблица перед расчетами:

     Rating A     Ratings B     Ratings C
Jane    0           -1              0
Rick    1           -2              1
Johnny -1            2              5
James   3            2              3

После того, как:

       Rating A        Ratings B         Ratings C
Jane     0                -1                0
Rick     1                -2                1
Johnny  -1                 2                5 
James    3                 2                3
        Rick            Johnny          Johnny
         1                 2                5
        James            James            James
         3                 2                3
                                          Rick
                                            1

Как видно выше, у Рика и Джеймса есть рейтинги А> 0, поэтому формула выводит результаты, начиная со следующей пустой строки в столбце Рейтинг А. Та же методика для рейтингов B и C. Обратите внимание, что это намного меньше, чем большая таблица. Я не могу опубликовать полную таблицу, состоящую из тысяч строк и столбцов.

1 Ответ

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

Прежде всего, как предложило urdearboy , я бы немного подумал об изменении формата вывода и использовании сводной таблицы. Однако, если это не вариант, вы можете попробовать for...next loop.

Код ниже будет зацикливать ваш пример и собирать результаты так, как вы хотите, но я позволил себе поместить результаты в отдельные столбцы, так как это было бы гораздо более универсально для будущего использования.

Sub Check_rating()

Dim x As Long
Dim ws As Worksheet
Dim counterA As Long
Dim counterB As Long
Dim counterC As Long

Set ws = Worksheets("Sheet1")

    For x = 2 To Range("Table1").Rows.Count + 1
        If ws.Cells(x, "B").Value > 0 Then
            counterA = counterA + 1
            ws.Cells(counterA, "F").Value = ws.Cells(x, "A").Value
            ws.Cells(counterA, "G").Value = ws.Cells(x, "B").Value
        End If
        If ws.Cells(x, "C").Value > 0 Then
            counterB = counterB + 1
            ws.Cells(counterB, "H").Value = ws.Cells(x, "A").Value
            ws.Cells(counterB, "I").Value = ws.Cells(x, "C").Value
        End If
        If ws.Cells(x, "D").Value > 0 Then
            counterC = counterC + 1
            ws.Cells(counterC, "J").Value = ws.Cells(x, "A").Value
            ws.Cells(counterC, "K").Value = ws.Cells(x, "D").Value
        End If
    Next x

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