Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: передача адреса ячейки в макрос и запуск по условию  (Прочитано 12696 раз)
0 Пользователей и 1 Гость смотрят эту тему.
uotani
Новенький

ru
Offline Offline

« : 21-09-2011 19:30 » 

Добрый день.
Проблема такая - в рабочем листе заполняются поля, оттуда берутся данные, различным образом обрабатываются, например:
   А                 В                      С                   D
21.сен   суммесли…   суммесли…   впр(…
22.сен   суммесли…   суммесли…   впр(…
23.сен   суммесли…   суммесли…   впр(…
24.сен   суммесли…   суммесли…   впр(…


нужно сделать так, чтобы при появлении данных в очередной строке (например, данные за 21.сен заполнены, начинается заполнение за 22.сен, т.е. в этой строке в столбцах В, С, D и т.д. появляются ненулевые значения) данные за "прошедший" период сохранялись как значение.
Можно конечно прописать макрос, запускаемый по условию для каждой ячейки, но это очень громоздко (много строк и столбцов), да и при добавлении новых столбцов нужно писать новый.
Заранее спасибо за помощь.

Добавлено через 11 минут и 29 секунд:
извиняюсь, как-то насвязанными получилась тема и само сообщение - сначала думал о том, чтобы условие активировалось через обычное ЕСЛИ, которое запускало бы функцию, передающую адрес нужной ячейки в макрос
« Последнее редактирование: 21-09-2011 19:42 от uotani » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 21-09-2011 20:15 » 

Всё равно несвязно. В ячейке либо данные, либо формула. У тебя из данных только дата, остальное - формулы. Поэтому что куда и откуда заполняется, совершенно непонятно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
uotani
Новенький

ru
Offline Offline

« Ответ #2 : 22-09-2011 03:58 » 

изначально, кроме даты везде формулы, которые нужно заменять на значения, как только пошли данные за следующую дату, т.е. в примере, допустим пока еще 21.сен, везде должны быть формулы (только в строках с датой 22.сен и дальше результаты расчетов в ячейках с формулами=0), затем, 22.сен появляются данные за это число и нужно, чтобы ячейки с формулами от 21.сен стали значениями:
  А                 В                      С                   D
21.сен   суммесли…   суммесли…   впр(…                 все формулы сохранить как значения
22.сен   суммесли…   суммесли…   впр(…                 (поступают данные за это число)
23.сен   суммесли…   суммесли…   впр(…                 данные вычислений = 0
24.сен   суммесли…   суммесли…   впр(…                 данные вычислений = 0

Добавлено через 7 минут и 31 секунду:
да, если непонятно про данные и про формулы - данные идут "лентой" на одном листе (рабочем), а все расчеты ведутся на другом листе, на котором и нужно преобразовывать формулы в значения.
« Последнее редактирование: 22-09-2011 04:06 от uotani » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 22-09-2011 06:25 » 

uotani, с данными вроде понятно. Теперь с событиями и поведением. Как данные попадают в книгу? (Пользователь вводит или какая-то программа записывает.) Расчёт происходит автоматически или вручную (по F9)? Просмотр листа с формулами (результатами вычислений) пользователь делает сразу после внесения данных, или это совсем не зависит от ввода данных (может даже разные люди)?

Формулы на значения может поменять только макрос. Однако можно составить формулы, которые дают значения по условию наличия или отсутствия данных в определённых ячейках. Например, комбинация COUNT и IF.
« Последнее редактирование: 22-09-2011 06:45 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
uotani
Новенький

ru
Offline Offline

« Ответ #4 : 22-09-2011 16:29 » 

данные выгружаются прогой в отдельный лист (запускется выгрузка и останавливается вручную), на который все ссылки в формулах. Расчет автоматический, т.е. расчетные даннные должны быть всегда доступны и обновлены (по ним рисуется диаграмма в реальном времени), но процесс вывода с этим не связан - он должен идти, пока есть данные или пока не остановят выгрузку.
Понятно, что нужен макрос - в принципе можно и так сделать, но это будет громоздко прописывать условие и копи-паст для каждой строки.
Не знаю, возможно ли такое, но мне кажется было бы очень удобно сделать пользовательскую функцию с аргументом в виде АДРЕС(..), которая бы передавала адрес ячейки в макрос и он ее копипастил, а функцию запускать через обычное условие ЕСЛИ. Ну или в макросе адреса и проверки сделать через цикл, в котором задавать только количество проверяемых строк и диапазон столбцов - все удобнее переделывать его под другие ячейки, чем полное описание адресов.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 22-09-2011 20:48 » 

Цитата: notani
Понятно, что нужен макрос - в принципе можно и так сделать, но это будет громоздко прописывать условие и копи-паст для каждой строки.
Как раз наоборот, именно это-то проще всего решается в макросе при помощи цикла. И это именно то, что не могут обеспечить формулы. Это именно то, ради чего и нужен макрос.

Дело здесь в другом. Макрос должен запускаться по какому-то событию. И если определённого события нет, то непонятны условия работы макроса.

Цитата: notani
данные выгружаются прогой в отдельный лист

Расчет автоматический, т.е. расчетные даннные должны быть всегда доступны и обновлены
Вот это непонятно. Excel открыт, и программа, работающая в фоновом режиме, записывает в него данные, а пользователь смотрит "бегущие цифры" на листе с формулами? Программа выгружает данные в книгу, а затем пользователь открывает эту книгу, и у него сразу появляются доступные и обновлённые результаты расчётов формул?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
uotani
Новенький

ru
Offline Offline

« Ответ #6 : 23-09-2011 03:50 » 

Цитата: Dimka
Дело здесь в другом. Макрос должен запускаться по какому-то событию. И если определённого события нет, то непонятны условия работы макроса.
Событие - когда в следующей строке появляются ненулевые значения, т.е. пока нет данных за будущие дни, там везде стоят нули, либо пусто

Цитата: Dimka
Вот это непонятно. Excel открыт, и программа, работающая в фоновом режиме, записывает в него данные, а пользователь смотрит "бегущие цифры" на листе с формулами? Программа выгружает данные в книгу, а затем пользователь открывает эту книгу, и у него сразу появляются доступные и обновлённые результаты расчётов формул?
Excel открыт всегда и выгрузка идет в фоновом режиме. На "портянку" данных никто не смотрит без особой необходимости, а смотрят на другой лист, где идут расчеты и рисуется диаграмма - вот там должны данные обрабатываться сразу, т.е. допустим, утром выгружаются последние данные за вчерашний день, все формулы расчитывают вчерашний день. Потом в какой-то момент пришла строка с текущей датой - соответственно, формулы текущей даты ее сразу просчитали и в тот момент, когда появились какие-то цифры за "сегодня", все формулы "вчерашней" строки должны стат значениями.
« Последнее редактирование: 26-09-2011 03:46 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines