Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2011, 22:14   #1
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию СУММЕСЛИ и автофильтр

ДОбрый вечер, Уважаемые!
Считаю суммы отрицательных и положительных значений в столбце формулами
Код:
=СУММЕСЛИ(B12:B65000;"<0")
и
=СУММЕСЛИ(B12:B65000;">0")
все бы хорошо, но они не срабатывают при применении автофильтра, т.е считают, независимо от выбора, весь диапазон.
Можно ли как-то сделать, чтобы можно было считать суммы отфильтрованные автофильтром?
Может здесь нужен другой подход, другие формулы?
Спасибо.
Вложения
Тип файла: zip СуммЕсли_АФ.zip (5.5 Кб, 31 просмотров)
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 15.02.2011 в 23:10.
VictorM вне форума Ответить с цитированием
Старый 16.02.2011, 01:42   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
ДОбрый вечер, Уважаемые!
Считаю суммы отрицательных и положительных значений в столбце формулами
Код:
=СУММЕСЛИ(B12:B65000;"<0")
и
=СУММЕСЛИ(B12:B65000;">0")
все бы хорошо, но они не срабатывают при применении автофильтра, т.е считают, независимо от выбора, весь диапазон.
Можно ли как-то сделать, чтобы можно было считать суммы отфильтрованные автофильтром?
Может здесь нужен другой подход, другие формулы?
Спасибо.
для минуса
=(ОКРУГЛ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;B11: B2499);0))+СУММЕСЛИ(B11:B65000;"<0" )-СУММ(B11:B65000)
поспешил...........
если по аналогии сделать плюс
=(ОКРУГЛ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;B11: B2499);0))+СУММЕСЛИ(B11:B65000;">0" )-СУММ(B11:B100)

то выдает не совсем то что надо ((
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 16.02.2011 в 01:47.
R Dmitry вне форума Ответить с цитированием
Старый 16.02.2011, 10:07   #3
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

нда...
похоже формулами тут не получится, буду пробовать макрос
макрос тоже устроит
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 16.02.2011, 11:55   #4
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Поскольку решение с макросом меня вполне устраивает (критерии автофильтра задаются кнопками на листе), повесил на кнопки вот такой макрос
Код:
Sub СуммаМинусПлюс()
    iминус = 0
    iплюс = 0
    With ThisWorkbook.Worksheets(1)
        If .AutoFilterMode = True And .FilterMode = True Then
            With .AutoFilter.Range.Columns(2)
                Set iFilterRange = _
                .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlVisible)
                For Each iCell In iFilterRange
                    iVal = iCell.Value
                    If iVal < 0 Then iминус = iминус + iVal
                    If iVal > 0 Then iплюс = iплюс + iVal
                Next
            End With
        End If
    End With
    [b1] = iминус
    [b2] = iплюс
End Sub
Все отлично работает!
Код перебора отфильтрованных строк взят отсюда Как перебрать только отфильтрованные строки в автофильтре
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 27.02.2011, 02:21   #5
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Наворочал перед сном
Для отрицательных (формула массива). Для положительных поменять знак или формула ниже
Код:
=СУММ(ЕСЛИ(A11:A2499=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;A11:A2499)/ПРОМЕЖУТОЧНЫЕ.ИТОГИ(2;A11:A2499);ЕСЛИ(B11:B2499<0;B11:B2499)))
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;B11:B2499)-отрицательные
Работает, если фильтровать по числовым данным столбца А
vikttur вне форума Ответить с цитированием
Старый 27.02.2011, 11:42   #6
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Наворочал перед сном
Хорошие у вас мысли перед сном
Спасибо!
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 27.02.2011, 13:36   #7
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

VictorM,
была похожая задача:
http://www.programmersforum.ru/showthread.php?t=126908

см.вложение
Вложения
Тип файла: rar СуммЕсли_АФ_2.rar (4.7 Кб, 41 просмотров)
ZORRO2005 вне форума Ответить с цитированием
Старый 27.02.2011, 13:40   #8
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Даже можно проще:
Код:
=СУММ(--(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(B10;СТРОКА(1:200);))*(B11:B210<0)))
Код:
=СУММ(--(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(B10;СТРОКА(1:200);))*(B11:B210>0)))
ZORRO2005 вне форума Ответить с цитированием
Старый 27.02.2011, 13:51   #9
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

ZORRO2005, да, красиво! Спасибо!
Все в копилку!
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 27.02.2011, 16:46   #10
rexec
Пользователь
 
Аватар для rexec
 
Регистрация: 27.12.2007
Сообщений: 73
По умолчанию

Цитата:
Сообщение от ZORRO2005 Посмотреть сообщение
Даже можно проще:
[CODE]=СУММ(--(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(B10;СТР ОКА(1:200))*(B11:B210<0)))
Скажите, пожалуйста, для чего стоят "--" перед промежуточными итогами?
Заранее спасибо
rexec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поймать автофильтр GES Microsoft Office Excel 9 04.12.2010 21:37
автофильтр по вертикали gling Microsoft Office Excel 0 04.05.2010 23:17
Автофильтр PTYTb Microsoft Office Excel 4 03.04.2010 11:26
автофильтр zetrix Microsoft Office Excel 0 31.10.2006 07:58