Страницы: 1
RSS
Сумма только видимых столбцов, Добрый день! Нужен макрос для суммирования только видимых столбцов, без скрытых столбцов.
 
Добрый день! Нужен макрос для суммирования только видимых столбцов, без учёта скрытых столбцов.
При скрытии ненужных столбцов, результат суммы должен меняться. Помогите пожалуйста аналогичной темы на форуме не нашёл. Я так понял формулами здесь не обойтись, нужен макрос. Пробовал функцию =АГРЕГАТ она работает только по строкам, а мне нужно именно по столбцам...

Как пример приложил файл...
 
johnycage123,думаю макросом  например UDF
Код
Public Function summm(rng As Range)
Dim arr, i As Long, cell As Range
For Each cell In rng
    If Columns(cell.Column).EntireColumn.Hidden = False Then
            s = s + cell
        End If
Next cell
summm = s
End Function
Изменено: Mershik - 26.04.2021 13:28:20
Не бойтесь совершенства. Вам его не достичь.
 
Mershik,
Цитата
johnycage123 написал:
При скрытии ненужных столбцов, результат суммы должен меняться
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Mershik,  по вашему макросу вроде считает то что нужно, но при скрытии какого-либо столбца пересчёт не происходит ...
 
johnycage123, cye  UDF автообновление не прокатит ))
можно макрос что бы при изменении значений или пересчете...

Ігор Гончаренко, ну лучше чем ничего)
Изменено: Mershik - 26.04.2021 14:33:53
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
можно макрос что при изменении значений
нету изменений значений (столбец скрыли, столбец показали, значения остались там где и были, но видны уже другие столбцы и сумма должна стать другой))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, ну например сделать переход с листа на лист...или просто автоматически запускать макрос кнопкой типа "Обновить"
Не бойтесь совершенства. Вам его не достичь.
 
Можно объявить функцию из #2 как летучую (Application.Volatile), перехватывать скрытие / отображение столбцов и "дергать" пересчеты на листе, но все это очень сложно...
Владимир
 
теоретически все так
но как перехватить событие скрытия / отображения столбцов? (особенно если такого события нет в системе)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
OnChange, OnSelectionChange, OnActivation должно перекрыть все случаи, кроме работы макросов.
Я не волшебник, я только учусь.
 
Wiss, и как это реализовать не могли бы вы показать пожалуйста, на примере буду очень благодарен ...
 
Цитата
johnycage123 написал:
буду очень благодарен ...
очень большие подозрения, что повода не представится((
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
но как перехватить событие скрытия / отображения столбцов? (особенно если такого события нет в системе)
Я не написал "событие". :)  Скрытие и отображение столбца производится через определенные пункты меню, а уже у пункта меню есть свои события. Подобная техника демонстировалась, например, здесь. Но повторюсь, это неоправданно сложно.
Владимир
 
я остановился на этом же - столько копать... какой смысл)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Как промежуточный вариант вставляем как предложил sokol92 оператор в функцию Mershik
Код
Application.Volatile True

В книге есть событие щелчок правой кнопки

Код
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Application.Calculate
End Sub

будет пересчет по щелчку правой кнопки мыши

Изменено: Евгений Смирнов - 26.04.2021 17:23:03
 
Цитата
Евгений Смирнов написал:
будет пересчет по щелчку правой кнопки мыши
а по скрытию или отображению столбца будет?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Нет не будет. Зачем спрашивать сами знаете. Чтобы нормально сделать надо писать как предложил sokol92 в сообщении 8
 
и вы понимаете, что работать не будет, но предлагаете в качестве решения
интересный подход....
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
По методу sokol92 написал события скрытия и отображения столбцов, но они происходят перед скрытием(отображением) столбца, сразу после нажатия кнопки скрыть(показать) а столбцы еще не скрыты. Пересчет происходит рано. Не помогает
Кстати с этим оператором при повторном выделении любого столбца происходит пересчет
Код
Application.Volatile True
Изменено: Евгений Смирнов - 27.04.2021 09:20:37
 
Цитата
Евгений Смирнов написал:
пересчет происходит рано
Вызывайте макрос, который будет вызывать пересчет ячеек, с помощью Application.Ontime.
Изменено: sokol92 - 26.04.2021 21:11:24
Владимир
 
С методом Ontime получилось. Задержка 1/5 секунды поставил. В коде можно поменять. Пересчет будет при скрытии(отображении) столбцов. UDF Mershik. Советы sokol92  
Изменено: Евгений Смирнов - 27.04.2021 05:35:51
 
Евгений Смирнов,
Добрый день! Спасибо большое, то что надо ...
А можно ли ещё добавить, чтобы не только по правому щелчку происходил пересчёт, а ещё и по комбинации клавиш - скрытие столбца Ctrl+0 ?
 
johnycage123 В сообщении 21 пересчет происходит  при скрытии(отображении) столбцов, а не по щелчку правой кнопки мыши.(этот метод в сообщении 15)
 
Евгений Смирнов,
А почему тогда при скрытии столбца с помощью Ctrl-0 пересчёт не происходит пока не нажмёшь пересчет формул?
 
Событие скрытия(отображения) столбцов отлавливается на панели инструментов. По комбинации  клавиш нет события в моем файле.
Изменено: Евгений Смирнов - 27.04.2021 13:37:49
 
Евгений Смирнов, хорошо, спасибо большое!
Добавил в #21 реакцию на Ctrl+0.
По хорошему, еще осталось добавить перехватчик скрытия/отображения столбцов через меню Главная/Формат/Скрыть или отобразить...
Владимир
 
sokol92 Спасибо большое за учебу. Насчет перехватчика сейчас нет времени. Попозже подумаю.
 
Цитата
Ігор Гончаренко написал:
очень большие подозрения, что повода не представится((
Очень хотелось возмутиться, мол "что за поклёп и провокация", но да - повода не представится. Вариант с описанными мною событиями работает не так хорошо, как хотелось. Зато надёжно, но могут возникнуть тормоза, если в книге будет много сложных формул формул.
Я не волшебник, я только учусь.
 
johnycage123
Цитата
А можно ли добавить, чтобы происходил  пересчёт,  ещё и по комбинации клавиш - скрытие столбца Ctrl+0 ?
Проверяйте теперь и Ctrl-0 реагирует
Изменено: Евгений Смирнов - 28.04.2021 04:50:17
Страницы: 1
Наверх