Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Пересчет только видимых ячеек - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Пересчет только видимых ячеек (Макросы/Sub)
Пересчет только видимых ячеек
and_evg Дата: Четверг, 06.06.2019, 13:42 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 336
Репутация: 56 ±
Замечаний: 0% ±

Excel 2007
Всем доброго времени суток.

Возникла следующая проблема.
Имеется таблица порядка 5000 строк, в каждой строке порядка 20 колонок с формулами при чем формулы ссылаются на ячейках только в данной строке. Также на данную таблицу наложен автофильтр и используются формулы типа
Код
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;F4:F5099)

Так как в работе постоянно необходимо использование автофильтра и при изменении набора строк происходит пересчет данной таблицы (на слабеньких машинах занимает продолжительное время). Вот что то не соображу - как сделать, что бы пересчитывались только видимые ячейки.
Заранее спасибо за подсказку в каком направлении копать.
 
Ответить
СообщениеВсем доброго времени суток.

Возникла следующая проблема.
Имеется таблица порядка 5000 строк, в каждой строке порядка 20 колонок с формулами при чем формулы ссылаются на ячейках только в данной строке. Также на данную таблицу наложен автофильтр и используются формулы типа
Код
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;F4:F5099)

Так как в работе постоянно необходимо использование автофильтра и при изменении набора строк происходит пересчет данной таблицы (на слабеньких машинах занимает продолжительное время). Вот что то не соображу - как сделать, что бы пересчитывались только видимые ячейки.
Заранее спасибо за подсказку в каком направлении копать.

Автор - and_evg
Дата добавления - 06.06.2019 в 13:42
_Boroda_ Дата: Четверг, 06.06.2019, 14:12 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15195
Репутация: 5972 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Не уверен, но попробуйте поставить ручной пересчет и в модуль листа что-то типа
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("A1:C5").SpecialCells(xlCellTypeVisible).Calculate
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе уверен, но попробуйте поставить ручной пересчет и в модуль листа что-то типа
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("A1:C5").SpecialCells(xlCellTypeVisible).Calculate
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 06.06.2019 в 14:12
and_evg Дата: Четверг, 06.06.2019, 14:26 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 336
Репутация: 56 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, Спасибо
Сам пробовал вот это
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Me.UsedRange.SpecialCells(xlCellTypeVisible).Calculate
End Sub
[/vba]
Помогает при внесении изменений, но к сожалению не спасает при применении автофильтра
 
Ответить
Сообщение_Boroda_, Спасибо
Сам пробовал вот это
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Me.UsedRange.SpecialCells(xlCellTypeVisible).Calculate
End Sub
[/vba]
Помогает при внесении изменений, но к сожалению не спасает при применении автофильтра

Автор - and_evg
Дата добавления - 06.06.2019 в 14:26
_Boroda_ Дата: Четверг, 06.06.2019, 14:34 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15195
Репутация: 5972 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Можно конечно циклом проверять каждую ячейку (а лучше каждую строку) на видимость и пересчитывать только видимые. Но нужно смотреть - не факт, что это получится быстрее, чем считать всё

Еще вариант переписать формулы примерно вот так
Код
=если(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;A2);ФОРМУЛА;)

Или в отдельный столбец (пусть в Е) написать
Код
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;A2)
и формулы переписать так
Код
=если(E2;ФОРМУЛА;)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМожно конечно циклом проверять каждую ячейку (а лучше каждую строку) на видимость и пересчитывать только видимые. Но нужно смотреть - не факт, что это получится быстрее, чем считать всё

Еще вариант переписать формулы примерно вот так
Код
=если(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;A2);ФОРМУЛА;)

Или в отдельный столбец (пусть в Е) написать
Код
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;A2)
и формулы переписать так
Код
=если(E2;ФОРМУЛА;)

Автор - _Boroda_
Дата добавления - 06.06.2019 в 14:34
and_evg Дата: Четверг, 06.06.2019, 15:34 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 336
Репутация: 56 ±
Замечаний: 0% ±

Excel 2007
конечно циклом проверять каждую ячейку (а лучше каждую строку) на видимость

А по какому событию? Вот в чем вопрос... насколько я понял, что у автофильтра нет события
 
Ответить
Сообщение
конечно циклом проверять каждую ячейку (а лучше каждую строку) на видимость

А по какому событию? Вот в чем вопрос... насколько я понял, что у автофильтра нет события

Автор - and_evg
Дата добавления - 06.06.2019 в 15:34
_Boroda_ Дата: Четверг, 06.06.2019, 15:55 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15195
Репутация: 5972 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Сделайте лучше по второму варианту второго варианта.
Думаю, что так быстрее работать будет, чем макросом считать построчно. Впрочем, можно проверить - повесьте его (макрос) на кнопку и попробуйте. Там, кстати, даже не построчно можно, а по areas. Но все равно не нравится мне очень это.
Кстати, формулы нельзя оптимизировать?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСделайте лучше по второму варианту второго варианта.
Думаю, что так быстрее работать будет, чем макросом считать построчно. Впрочем, можно проверить - повесьте его (макрос) на кнопку и попробуйте. Там, кстати, даже не построчно можно, а по areas. Но все равно не нравится мне очень это.
Кстати, формулы нельзя оптимизировать?

Автор - _Boroda_
Дата добавления - 06.06.2019 в 15:55
and_evg Дата: Пятница, 07.06.2019, 07:23 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 336
Репутация: 56 ±
Замечаний: 0% ±

Excel 2007
Сделайте лучше по второму варианту второго варианта.

формулы нельзя оптимизировать?

К сожалению формулы вводят пользователи (каждый в свой файл) и всем невозможно будет объяснить логику, тем более что у каждого пользователя свои условия договора и свои специфические формулы.
циклом проверять каждую ячейку (а лучше каждую строку) на видимость и пересчитывать только видимые

проверить - повесьте его (макрос) на кнопку

Пока решил повесить на кнопку:
[vba]
Код
Public Sub myCalc()
    Me.UsedRange.SpecialCells(xlCellTypeVisible).Calculate
End Sub
[/vba]
и для обработки изменения
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    myCalc
End Sub
[/vba]

На будущее думаю проверять изменения автофильтра раз в секунду, но что то настораживает это <_<
 
Ответить
Сообщение
Сделайте лучше по второму варианту второго варианта.

формулы нельзя оптимизировать?

К сожалению формулы вводят пользователи (каждый в свой файл) и всем невозможно будет объяснить логику, тем более что у каждого пользователя свои условия договора и свои специфические формулы.
циклом проверять каждую ячейку (а лучше каждую строку) на видимость и пересчитывать только видимые

проверить - повесьте его (макрос) на кнопку

Пока решил повесить на кнопку:
[vba]
Код
Public Sub myCalc()
    Me.UsedRange.SpecialCells(xlCellTypeVisible).Calculate
End Sub
[/vba]
и для обработки изменения
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    myCalc
End Sub
[/vba]

На будущее думаю проверять изменения автофильтра раз в секунду, но что то настораживает это <_<

Автор - and_evg
Дата добавления - 07.06.2019 в 07:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Пересчет только видимых ячеек (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!