Как мне повторить функцию на несколько строк - PullRequest
1 голос
/ 01 апреля 2010

Я признаю, что я не гуру Excel, поэтому, возможно, кто-то здесь может мне помочь.

На моем листе у меня есть несколько блоков данных.

Я вычисляю сумму всех элементов в столбце D этого блока. В каждом блоке я проверяю значение ячейки в столбце C, и если оно содержит букву «y», а значение в столбце D этой строки равно нулю, я должен исключить общую сумму столбца D.

В настоящее время я делаю это, умножая значение суммы на 1 или 0, полученное путем запуска теста содержимого ячейки.

Ниже приведен пример того, что я использую для проверки строк с 23 по 25 включительно для данных в столбце D. Я также выполняю то же самое для столбцов E и G, но символ "y" всегда находится в столбце C отсюда и абсолютная ссылка на колонку.

=IF(AND($C23="y",D23=0),0,1)*IF(AND($C24="y",D24=0),0,1)*IF(AND($C25="y",D25=0),0,1)

Должен быть более эффективный способ сделать это.

В идеале я хотел бы написать функцию, которую я могу вставить в ячейку, а затем выбрать строки или ячейки, над которыми я запускаю тест.

Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Я не уверен, что я понимаю вопрос на 100%, но в любом случае вот ответ:

{=NOT(SUM((C23:C25="y")*(D23:D25=0)))*SUM(D23:D25)}

Не вводите фигурные скобки, вместо этого введите формулу, используя Control + Shift + Enter, чтобы сделать ее формулой массива. Вот что он делает:

Во-первых, он считает все строки, где C - это y, а D - ноль. Это вернет (в этом примере) 0, 1, 2 или 3. НЕ изменит ноль на 1 и изменит что-либо еще на ноль. Тогда этот один или ноль будет умножен на сумму столбца D.

Так что, если в нулевых строках есть оба 'y' и 0, умножьте SUM на 1. Если более чем в нулевых строках есть оба 'y' и 0, умножьте SUM на 0.

1 голос
/ 01 апреля 2010

Эта функция должна работать:

Option Explicit

Public Function getMySum(src As Range, sumColumn As Integer)
Dim iRow As Range
Dim yColumn As Integer

    yColumn = 1
    getMySum = 0

    For Each iRow In src.Rows

        If (Strings.StrConv(iRow.Cells(1, yColumn), vbLowerCase) <> "y") Or (iRow.Cells(1, sumColumn) <> 0) Then
            getMySum = getMySum + iRow.Cells(1, sumColumn)
        Else
            getMySum = 0
            Exit For
        End If
    Next iRow
End Function

Вам необходимо добавить этот код в модуль VBA

Вызов функции для вашего примера будет: =getMySum("C:23:D25", 2)

Единственный другой вариант, который я вижу, это объединить значения в c и d, например =C23&";"&D23, и sumif VLOOKUP, который ищет "y; 0", возвращает ошибку.

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