Страницы: 1
RSS
Макрос, удаляющий определенные формулы
 
Надо написать макрос, который в листе удалял бы только формулы, которые содержат "суммесли". удалял - то есть "копировать - вставить значение". Другие формулы не трогал.  
 
Я знаю, что это должно очень просто делаться. Но вот как? Может кто примерно тут написать?
 
{quote}{login=Андрей В.}{date=15.07.2011 11:35}{thema=Макрос, удаляющий определенные формулы}{post}Надо написать макрос...Я знаю, что это должно очень просто делаться. Но вот как?.. {/post}{/quote}  
Классика - я не умею, но знаю что это очень(!!!) просто!  
А если в файле суммесли встроена в суммесли, а если... Будет быстрее и продуктивнее - правила, пример, плюс толковое объяснение почему, что, зачем...  
-32007-
 
например  
 
Sub test()  
   Dim c As Range  
   For Each c In ActiveSheet.UsedRange.Cells  
       If c.HasFormula Then  
           If InStr(1, c.Formula, "SUMIF") <> 0 Then c.Value = c.Value  
       End If  
   Next  
End Sub
 
Вот такая формула:  
=СУММЕСЛИ('X:\Budgeting\Transactions\Активы-Пассивы\[0_11_Баланс_Остатки.xlsm]Главная'!$V$1:$V$65536;$A$6&"_"&МЕСЯЦ(J$5)&"_"&$B114;'X:\Budgeting\Transactions\Активы-Пассивы\[0_11_Баланс_Остатки.xlsm]Главная'!$D$1:$D$65536)/1000000/ГПР(J$5;Service!$B$3:$M$5;3;ЛОЖЬ)
 
или вот еще длиннее:  
=(-1)^(1+$D28)*(-(СУММЕСЛИ([0_11_706_Проводки.xlsm]Главная_1!$Z$2:$Z$65000;$A$6&"_"&ГОД($A$7)&"_"&МЕСЯЦ(K$5)&"_"&$B28&"_"&$C28&"_"&$D28;[0_11_706_Проводки.xlsm]Главная_1!$G$2:$G$65000)-СУММЕСЛИ([0_11_706_Проводки.xlsm]Главная_1!$Z$2:$Z$65000;$A$6&"_"&ГОД($A$7)&"_"&МЕСЯЦ(K$5)&"_"&$B28&"_"&$C28&"_"&$D28;[0_11_706_Проводки.xlsm]Главная_1!$H$2:$H$65000)-СУММЕСЛИ('[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$AF$2:$AF$64960;$A$6&"_"&ГОД($A$7)&"_"&МЕСЯЦ(K$5)&"_"&$B28&"_"&$C28&"_"&$D28;'[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$H$2:$H$64960)+СУММЕСЛИ('[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$AF$2:$AF$64960;$A$6&"_"&ГОД($A$7)&"_"&МЕСЯЦ(K$5)&"_"&$B28&"_"&$C28&"_"&$D28;'[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$I$2:$I$64960)+СУММЕСЛИ('[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$AG$2:$AG$64960;$A$6&"_"&ГОД($A$7)&"_"&МЕСЯЦ(K$5)&"_"&$B28&"_"&$C28&"_"&$D28;'[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$H$2:$H$64960)-СУММЕСЛИ('[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$AG$2:$AG$64960;$A$6&"_"&ГОД($A$7)&"_"&МЕСЯЦ(K$5)&"_"&$B28&"_"&$C28&"_"&$D28;'[0_706_Проводки96.xlsm]ЦФО-ЦФО'!$I$2:$I$64960))/1000)
 
 
 
Из этих формул построен один отчет о доходах-расходах, остатках по счетам одного банка.  
Отчет берет инфу из 3 БД (проводки, проводки-корректировки, баланс). Так вот когда я буду рассылать этот отчет, никому не нужен тяжелый файл с формулами.  
 
Я могу вручную выделить весь лист и нажать Ctrl+q, у меня есть такой маркосик, который убивает все формулы вообще. Не подходит, так как кроме этих формул там есть "Промежуточные.итоги", формулы для расчета средних, которые пользователям моего отчета могут быть интересны.  
 
Я могу написать макрос, в котором буду поочередно выделять диапазон, жать Ctrl+q, при помощи мастера. Но это не поможет, так как может где-то добавиться строка.  
 
 
Итак, надо как-то это автоматизировать. Признак "убивания" ячейки - наличие фразы "суммесли". если она встречается в формуле, этой формулы не должно быть. Неужто такое не сделать?!  
 
 
Я конечно сделать могу с помощью мастера, но потом изменю отчет и все по новой. Надо как-то хитрее сделать:)
 
{quote}{login=webley}{date=15.07.2011 11:51}{thema=}{post}например  
 
Sub test()  
   Dim c As Range  
   For Each c In ActiveSheet.UsedRange.Cells  
       If c.HasFormula Then  
           If InStr(1, c.Formula, "SUMIF") <> 0 Then c.Value = c.Value  
       End If  
   Next  
End Sub{/post}{/quote}  
 
Вроде помогло. Спасибо:)
Страницы: 1
Наверх