|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.04.2014, 22:22 | #1 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
преобразовать формулу в макрос
как преобразовать формулу ActiveCell.FormulaR1C1 = "=RC[-7]-RC[-6]-RC[-2]"
в макрос на диапазоне с 8 до 1000 строки те c N8 до U1000 те результат вычислений в столбце U (ActiveCell.FormulaR1C1) а RC[-7] это столбец N единственное условие в макросе что формула должна появлятся работать когда есть значение в столбце N если значения нет в ячейках столбца N - то и формула не работает записал формулу как условие это к ней прикрутить Последний раз редактировалось brik; 17.04.2014 в 23:19. |
17.04.2014, 23:20 | #2 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
както так но не работает почему то
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("N8:U1000")) Is Nothing Then i = 8 If Cells(i, 14).Value <> "" Then Cells(i, 21).FormulaR1C1 = "=RC[-7]-RC[-6]-RC[-2]" i = i + 1 End If End Sub |
18.04.2014, 00:12 | #3 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
А не проще в U8:U1000 вставить формулу
Код:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
18.04.2014, 00:49 | #4 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
с макросом кажется получше
тк существует вероятность что случайно потрут формулу в какой либо ячейке диапазона до 1000 надо диапазон защищенный делать на пароль садить книгу а так макрос вроде всеравно пересчитает если результат попортят плюс еще когда если протягиваешь ЕСЛИ на длинный диапазон другие макросы например фильтрация и прочие замедляются так пробую - чето на формулу ругается Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("N8:U1000")) Is Nothing Then With Target(, 21) .FormulaR1C1 = "=IF(RC[-7]="";"";RC[-7]-RC[-6]-RC[-2])" End With End If End Sub так еще пробовал - тоже не получилось Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("N6:U1000")) Is Nothing Then With Target( , 21) If Target.Offset(0, -7).Value = "" Then Target.Value = "" Else Target.FormulaR1C1 = "=RC[-7]-RC[-6]-RC[-2]" End With End If End Sub гдето ошибки делаю Последний раз редактировалось brik; 18.04.2014 в 02:56. |
18.04.2014, 09:14 | #5 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Зачем Вы упорно хотите вставить формулы в ячейки? Если формулы заменять макросом, то пусть он и вычисляет требуемые значения.
И еще. При вашем подходе к решению задачи будет невозможна работа с диапазонами. Например, если вставили скопированный диапазон (или просто очистили) в влияющие ячейки, то макрос отработает только ячейку активной строки. Предлагаю поступить так: Код:
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 18.04.2014 в 10:22. |
18.04.2014, 11:20 | #6 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
Благодарю за ваше отличное решение ! Сам бы конечно не додумался до такого...
|
22.04.2014, 14:24 | #7 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
Уважаемый SAS888 - еще раз вынужден обратится к вам тк
макрос работает замечательно на нефильтрованном диапазоне - а если отфильтровать строки и вводить значения в таблицу в отфильтрованные строки - вычисления сбиваются к сожалению пример прилагаю - надеюсь на помощь что делать то - макрос замечательный делает то что нужно снимать фильтр перед его выполнением и потом снова ставить тотже - а если их несколько по разным критериям вначале перед выполнением ?? Последний раз редактировалось brik; 23.04.2014 в 00:08. |
22.04.2014, 22:06 | #8 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
те вариант какой может быть в этом случае -применил фильтр и получил его конфигурацию по каким критериям
снял фильтр выполнил этот макрос потом снова применил этот фильтр исходя из его конфигурации но как это сделать - как получить конфигурацию текущего фильтра и тд ума не приложу Последний раз редактировалось brik; 22.04.2014 в 23:43. |
23.04.2014, 08:22 | #9 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Изначально про автофильтр речи не было. Впредь оговаривайте все условия задачи целиком.
Посмотрите пример во вложении. В файле "Книга3" реализовано следующее: Если на рабочем листе применен автофильтр, то перед пересчетом ячеек определяется диапазон автофильтра, а так же все критерии и операторы автофильтра запоминаются в массиве, затем снимается автофильтр, происходит пересчет ячеек и фильтр восстанавливается в прежнее состояние. В файле "Книга4" другой вариант решения задачи: Нужные диапазоны помещаются в массивы, происходит пересчет и вывод результатов в соответствующие ячейки рабочего листа по очереди, т. к. помещать результаты в массив и выводить на лист "оптом" при примененном автофильтре некорректно.
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 23.04.2014 в 08:48. |
23.04.2014, 10:37 | #10 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 22
|
Вариант 2 (Книга4) предложенный вами рабочий - еще раз огромное спасибо за поддержку однако он менее предпочтителен
По варианту 1 (Книга3)ошибки идут при примененном фильтре +вставка значений - я на всякий случай выкладываю с пояснениями ошибка на строке a(i, 1) = .Filters(i).Criteria1 конечно вариант 1 предпочтительнее тк там перерасчет полный идет на листе при изм любой ячейки а в варианте 2 такого не получается - например в столбце N значение сотрешь - строка не пересчитывается Последний раз редактировалось brik; 23.04.2014 в 12:06. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как преобразовать нарисованную кривую в формулу | Natizk | Общие вопросы Delphi | 12 | 21.04.2013 19:30 |
Заданную логическую формулу преобразовать в эквивалентную днф | sergei15 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.05.2012 06:21 |
Макрос не вписывает формулу | agregator | Microsoft Office Excel | 3 | 10.02.2012 16:44 |
[Си++ Билдер]Преобразовать математическую формулу в нормальный для компилятора вид | mrG0bliN | Помощь студентам | 7 | 24.01.2012 19:28 |
Преобразовать формулу в макрос | Viento | Microsoft Office Excel | 10 | 23.01.2009 22:35 |