Здравствуйте, проблема в заголовке, пример в офис 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 вполне с этим справиться.
Sub u__44()
Application.ScreenUpdating = False
u = ActiveSheet.Name For Each c In Sheets(u).UsedRange IfLeft(c, 1) = "="Then
c.Offset(1, 0) = c.Value EndIf Next
Application.ScreenUpdating = True EndSub
RMMMM, если у вас en-версия, то ctrl+h вполне с этим справиться.
Sub u__44()
Application.ScreenUpdating = False
u = ActiveSheet.Name For Each c In Sheets(u).UsedRange IfLeft(c, 1) = "="Then
c.Offset(1, 0) = c.Value EndIf Next
Application.ScreenUpdating = True EndSub
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
PrivateSub Worksheet_Activate()
Application.ScreenUpdating = False
u = ThisWorkbook.ActiveSheet.Name For Each c In ThisWorkbook.Sheets(u).UsedRange IfLeft(c, 1) = "="Then
c.Offset(1, 0) = c.Value If c.Offset(1, 0) = "="Then c.Offset(1, 0).ClearContents EndIf Next
Application.ScreenUpdating = True EndSub
PrivateSub Worksheet_Activate()
Application.ScreenUpdating = False
u = ThisWorkbook.ActiveSheet.Name For Each c In ThisWorkbook.Sheets(u).UsedRange IfLeft(c, 1) = "="Then
c.Offset(1, 0) = c.Value If c.Offset(1, 0) = "="Then c.Offset(1, 0).ClearContents EndIf Next
Application.ScreenUpdating = True EndSub