Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.07.2022
Сообщений: 7
1

Параметры вычислений Excel

28.07.2022, 10:45. Показов 978. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые знатоки, подскажите пожалуйста, как сделать автоматический расчёт формул только для определённых ячеек? Все остальные при этом должны оставаться в режиме "вручную".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2022, 10:45
Ответы с готовыми решениями:

VBA vs Формулы Excel - разные результаты вычислений над числом Пи
Элемент задания имеет вид ctg(pi*a)^2, где рі=3,1415926. В VBA прописывал как 1/(tan(pi*a)^2),...

Параметры вычислений формул
Доброго времени суток! Уважаемые знатоки, в настройках Excel есть возможность переключения...

Форматирование ячеек Excel и параметры страницы Excel
Экспортирую DataGridView в Exel: Private Sub ToExcel() ' Try Dim sd As New...

Точность вычислений Excel 2013
Добрый день, подскажите пожалуйста, как в Excel 2013 установить точность вычислений как на экране?...

Как вывести результаты вычислений в Excel?
Вот код с решениями задач. Никак не могу сообразить как вывести ответы в excel private double...

8
917 / 577 / 71
Регистрация: 08.02.2017
Сообщений: 2,220
Записей в блоге: 1
28.07.2022, 17:21 2
Не знаю конкретно такого способа, но могу сказать, как достичь похожего результата. Формулы которые не нужно пересчитывать, можно поместить внутрь функции, которая будет сохранять старые значения и выдавать их вместо новых рассчетных данных. Т.е. пересчеты будут происходить, но функция будет выводить только старый результат.
Visual Basic
1
2
3
4
5
Function FreezeValue(frml)
    Static OldValue, varInit As Boolean
    If Not varInit Or manCalc Then OldValue = frml: manCalc  = False
    FreezeValue = OldValue
End Function
Ручную калькуляцию надо будет включать макросом в котором нужно прописать
Visual Basic
1
Public manCalc As Boolean: manCalc = True
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
28.07.2022, 17:32 3
Можно отключить пересчет полностью и сделать событие на изменение влияющих ячеек с константами (без формул). В теле события прописать пересчет целевых диапазонов ( .Calculate) на нужных листах.
0
0 / 0 / 0
Регистрация: 28.07.2022
Сообщений: 7
28.07.2022, 17:40  [ТС] 4
Так весь разговор затевался для того чтобы не ждать по пол часа пока формулы пересчитаются во всех открытых книгах. А получается пересчёт всё равно будет идти, с подменой на старые значения? В любом случае спасибо за науку!)
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
28.07.2022, 17:51 5
Пример для модуля нужного листа:
Visual Basic
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Oblast As Range
    Set Oblast = Intersect(Me.Range("A1:B20"), Target)
    If Oblast Is Nothing Then Exit Sub
    Me.Range("D1:E20").Calculate
End Sub
Добавлено через 4 минуты
"Полчаса" пересчитываются формулы СУММЕСЛИМН и аналогичные, если большое количество строк и столбцов.
В таком случае лучше полностью заполнять нужную форму макросом, считав предварительно массив базу заполнения.

Добавлено через 6 минут
У меня заполняются 18 однотипных листов форм с областью заполнения 21 столбец на 158 строк из массива 98000 строк на 20 столбцов за 12,4 сек
0
0 / 0 / 0
Регистрация: 28.07.2022
Сообщений: 7
28.07.2022, 18:05  [ТС] 6
Уважаемый КоGG, дело в том что я работаю в одном основном файле, в нём много листов, большие таблицы, сводные таблицы. От формул избавился два года назад, макрос берёт формулы из 213 ячеек, копирует вставляет, рассчитывает и полученный результат превращает в значения. Другими словами количество формул минимизировал. Но всё равно файл объёмный 30 Мбайт и параллельно приходится открывать кучу других файлов, в результате всё виснет и подбешивает. Давно отключил автоматический расчёт, но в определённых файлах отключать его не хочется. Но вот блин незадача, как только включаю режим автоматич, так все открытые книги начинают пересчитываться, а отккрывать книги в другом экселе я не умел, Вы меня только сегодня научили.

Добавлено через 1 минуту
Вот бы знающий специалист всялся бы оптимизировать мой файл)
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
29.07.2022, 09:48 7
Сводные таблицы - еще одна проблема, сильно замедляющая работу.
Все, что делает сводная таблица - может делать и макрос.
Желательно, чтобы все данные были в одной книге, внешние ссылки тоже замедляю работу.

Возможно комплект книг изначально не оптимизирован под быструю работу. Сильно ускорить может простая перекомпановка книг. Например все ресурсоемкие формулы : СУММЕСЛИМН, ВПР должны ссылаться на листы внутри одной книги, а в больших исходных массивах данных желательно вообще не иметь формул, зафиксировав значения.

Набирайтесь опыта, если не потянете - привлекайте фрилансеров.

Добавлено через 10 минут
В книгах часто накапливаются неиспользуемые имена с ссылками на внешние книги - они замедляют работу. Удаление:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub DeleteAllNames()
    Dim N
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        On Error Resume Next
        For Each N In ActiveWorkbook.Names
            N.Delete
        Next N
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub
Сильно замедляют работу графические объекты (как простые, так и кнопки) в большом количестве. Удаление:
Visual Basic
1
2
3
4
5
6
7
8
Sub DeleteAllShapes()
    Dim oL, Sh
    For Each Sh In ActiveWorkbook.Sheets
        For Each oL In Sh.Shapes
            oL.Delete
        Next
    Next Sh
End Sub
Еще иногда случайно при редактировании на листе появляются данные в области до 1000000 или до конца столбцов (покажет Activesheet.Usedrange.Address) - такая книга начинает очень сильно виснуть.
Очистить - выделить полностью неиспользуемые столбцы или строки и сделать Очистить все.
0
917 / 577 / 71
Регистрация: 08.02.2017
Сообщений: 2,220
Записей в блоге: 1
29.07.2022, 10:04 8
Цитата Сообщение от Danaher Посмотреть сообщение
А получается пересчёт всё равно будет идти, с подменой на старые значения?
Мой соет был конечно забавен.) Вообще зло такие функции как СМЕЩ. Если в формуле есть смещ, он будет заставлять пересчитываться свою ячейку + все зависимые при каждом пересчете на листе (возможно книги). В VBA такую функцию можно создать с параметром Application.Volatile = true.
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
29.07.2022, 10:33 9
Лучший ответ Сообщение было отмечено Danaher как решение

Решение

Еще для ускорения:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Удалить_усл_форм_проверки_имена()
' Удаляет условное форматирование, проверку данных, имена диапазонов на всех листах книги.
    Dim Sh, N
    On Local Error Resume Next
    For Each Sh In ActiveWorkbook.Sheets
        Sh.Cells.FormatConditions.Delete
        Sh.Cells.Validation.Delete
    Next 
    For Each N In ActiveWorkbook.Names
        N.Delete
    Next N
End Sub
1
29.07.2022, 10:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2022, 10:33
Помогаю со студенческими работами здесь

Программа должна отображать ход вычислений, допускать приостановку и прерывания вычислений
Разработать программу для сравнения эффективности двух заданных алгоритмов сортировки путем их...

Параметры ячейки Excel
Доброго! В свою систему импортирую файл Excel, но возникла потребность так же переносить ...

Восстановить параметры excel
после переустановки ОС один макрос перестал правильно работать. Думаю что проблема в том что...

Реализация в среде вычислений прямого алгоритма вычислений
Индуктивность дросселя определяется формулой L=μ*μ0*S/l*W^2 Определить число слоев намотки...

Excel Automate - параметры методов
Привет всем! Есть очень занимательная статья на MS: http://support.microsoft.com/kb/216686 Там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru