Как суммировать только те строки в Excel, которые не отфильтрованы? - PullRequest
52 голосов
/ 17 апреля 2009

Я использую формулу SUM(B1..B20) для суммирования столбца, но когда я фильтрую данные по соседнему столбцу, сумма не обновляется, чтобы отражать только те строки, которые не отфильтрованы. Как это сделать?

Ответы [ 3 ]

99 голосов
/ 17 апреля 2009

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

Формула будет выглядеть так:

=SUBTOTAL(9,B1:B20)

Номер функции 9 указывает ей использовать функцию SUM в диапазоне данных B1: B20 .

Если вы ' фильтруете ' путем скрытия строк, номер функции должен быть обновлен до 109 .

=SUBTOTAL(109,B1:B20)

Номер функции 109 также предназначен для функции SUM , но скрытые строки игнорируются.

3 голосов
/ 22 января 2014

Если вы не используете автофильтр (т.е. у вас есть скрытые строки вручную), вам нужно будет использовать функцию AGGREGATE вместо SUBTOTAL.

2 голосов
/ 17 апреля 2009

Когда вы используете автофильтр для фильтрации результатов, Excel даже не пытается их скрыть: он просто устанавливает высоту строки в ноль (по крайней мере, до 2003 года, но не уверен в 2007).

Таким образом, следующая пользовательская функция должна дать вам возможность начать делать то, что вы хотите (проверено целыми числами, больше ничего не играло):

Function SumVis(r As Range)
    Dim cell As Excel.Range
    Dim total As Variant

    For Each cell In r.Cells
        If cell.Height <> 0 Then
            total = total + cell.Value
        End If
    Next

    SumVis = total
End Function

Edit:

Вам нужно создать модуль в рабочей книге, чтобы поместить функцию, затем вы можете просто вызвать его на своем листе, как и любую другую функцию (= SumVis (A1: A14)). Если вам нужна помощь в настройке модуля, дайте мне знать.

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