Здравствуйте, проблема в заголовке, пример в офис 365 прилагаю. Пример недоделанный и несколько путанный, потому попробую детально объяснить что как работает и что нужно.
Нужно чтобы формулы автоматически формировалась из данных на закладке p4 (A3:A7, A20:A20 и прочих), копировались в столбцы C и D на закладке p3 и использовались в расчетах на закладке p2 (например в ячейках B15:F15 и B18:F18, результаты посчитанной формулы выводятся на ячейку ниже).
формулы считаются в зависимости от выбранного на закладке p1 сета. Для примера Set 48 рабочий (он создан вручную), сет 53 создан автоматически, формула формируется но не считается из-за ограничения в 256 символов команды
Код
=evaluate
Можно ли это все заставить работать без макроса или с каким то простым макросом.
Данные на страницах p3 и p4 будут дополняться.
PS Возможно я как то в принципе что то неправильно делаю и существует метод попроще выполнять эту задачу?
Здравствуйте, проблема в заголовке, пример в офис 365 прилагаю. Пример недоделанный и несколько путанный, потому попробую детально объяснить что как работает и что нужно.
Нужно чтобы формулы автоматически формировалась из данных на закладке p4 (A3:A7, A20:A20 и прочих), копировались в столбцы C и D на закладке p3 и использовались в расчетах на закладке p2 (например в ячейках B15:F15 и B18:F18, результаты посчитанной формулы выводятся на ячейку ниже).
формулы считаются в зависимости от выбранного на закладке p1 сета. Для примера Set 48 рабочий (он создан вручную), сет 53 создан автоматически, формула формируется но не считается из-за ограничения в 256 символов команды
Код
=evaluate
Можно ли это все заставить работать без макроса или с каким то простым макросом.
Данные на страницах p3 и p4 будут дополняться.
PS Возможно я как то в принципе что то неправильно делаю и существует метод попроще выполнять эту задачу?RMMMM
RMMMM, если у вас en-версия, то ctrl+h вполне с этим справиться. [vba]
Код
Sub u__44() Application.ScreenUpdating = False u = ActiveSheet.Name For Each c In Sheets(u).UsedRange If Left(c, 1) = "=" Then c.Offset(1, 0) = c.Value End If Next Application.ScreenUpdating = True End Sub
[/vba]
RMMMM, если у вас en-версия, то ctrl+h вполне с этим справиться. [vba]
Код
Sub u__44() Application.ScreenUpdating = False u = ActiveSheet.Name For Each c In Sheets(u).UsedRange If Left(c, 1) = "=" Then c.Offset(1, 0) = c.Value End If Next Application.ScreenUpdating = True End Sub
Nic70y, Не получается заставить макрос работать. На p1 выбираем сет 48 - на p2 в строке 16 - есть числа - все работает и без макроса На p1 выбираем сет 53 - на p2 в строке 16 - чисел нет
Nic70y, Не получается заставить макрос работать. На p1 выбираем сет 48 - на p2 в строке 16 - есть числа - все работает и без макроса На p1 выбираем сет 53 - на p2 в строке 16 - чисел нетRMMMM
Nic70y, Все верно, забыл макрос запустить. Так то работает но возникла странная проблема, если открыто 2 файла и меняю сет на тот у которого недостаточно данных, например 51, то макрос заменяет все формулы и даже пустые ячейки на "=". Я малознаком с макросами, но похоже макрос выполняется с другой книги и неправильно выполняется. Можно ли как то запретить макросу выполняться с другой копии? Вот скриншот как это выглядит: https://ibb.co/WVMcpy2 Я открывал файл из прошлого сообщения и Ваш файл и менял сет на p1. На каком то шаге формулы и пустые ячейки перезаписывались на "="
Nic70y, Все верно, забыл макрос запустить. Так то работает но возникла странная проблема, если открыто 2 файла и меняю сет на тот у которого недостаточно данных, например 51, то макрос заменяет все формулы и даже пустые ячейки на "=". Я малознаком с макросами, но похоже макрос выполняется с другой книги и неправильно выполняется. Можно ли как то запретить макросу выполняться с другой копии? Вот скриншот как это выглядит: https://ibb.co/WVMcpy2 Я открывал файл из прошлого сообщения и Ваш файл и менял сет на p1. На каком то шаге формулы и пустые ячейки перезаписывались на "="RMMMM
Private Sub Worksheet_Activate() Application.ScreenUpdating = False u = ThisWorkbook.ActiveSheet.Name For Each c In ThisWorkbook.Sheets(u).UsedRange If Left(c, 1) = "=" Then c.Offset(1, 0) = c.Value If c.Offset(1, 0) = "=" Then c.Offset(1, 0).ClearContents End If Next Application.ScreenUpdating = True End Sub
Private Sub Worksheet_Activate() Application.ScreenUpdating = False u = ThisWorkbook.ActiveSheet.Name For Each c In ThisWorkbook.Sheets(u).UsedRange If Left(c, 1) = "=" Then c.Offset(1, 0) = c.Value If c.Offset(1, 0) = "=" Then c.Offset(1, 0).ClearContents End If Next Application.ScreenUpdating = True End Sub