Страницы: 1
RSS
Отследить все измения в массиве данных по нескольким параметрам и сформировать комментарии к ним
 
Уважаемые форумчане! Помогите, пожалуйста, с автоматизацией анализа данных (см. вложение)!
Суть такова.
Имеется некая система, данные в которой представлены в виде таблицы из вложения. Лист «Report» - это отчет о начальном состоянии системы (до запуска анализа) и конечном (по итогам обработки массива данных). Лист «Data» - мониторинг состояния системы в течение анализируемого периода (столбец «Время запроса» - примерно с интервалом в 1 час происходит опрос состояния по каждому объекту и узлу). Система достаточно статична, однако иногда параметры «Line1, 2, 3» изменяют свое состояние с «Open» на «Close» и наоборот. Кроме того, крайне редко, но тем не менее - может измениться параметр, представленный в столбце «SName». В отличие от Line, в случае с SName возможно множество вариантов.
Задача заключается в том, чтобы средствами VBA отследить и проинформировать пользователя о всех изменениях системы за период времени из “Data”.
Т.е. в конце обработки, таблица на листе «Report» должна, во-первых обновиться и заполниться наиболее свежими данными, а во-вторых в поле «Комментарий» должны появиться записи о всех произошедших в период анализа для объекта/узла событиях, примерно такого вида: «25.08.13 22:05; Line1: Close; 26.08.2013 4:05; Line1: Open.». Стоит добавить, что представленная таблица является уменьшенной копией оригинальной, в которой объектов около полусотни (соответственно, узлов примерно 200), а параметров типа «Линия», не 3, а 9. Короче, представляете, насколько это тоскливо – просматривать такие портянки, особенно, если период выбран за неделю. Понятно, что фильтрация и условное форматирование помогают, но…  :cry:
Изменено: yeti - 29.08.2013 21:32:11 (Ошибочный архив)
 
Файла нет.
 
Есть, просто я сначала по ошибке не тот архив затолкал, пока менял - он был недоступен...
 
Делать некогда.
Но алгоритм думаю такой - цикл по массиву, ключ объект|номерузла в словарь, ему в Item массив с значениями
Время запроса SName Line1 Line2 Line3
и коллекцией (или сразу собирать строку, но возможно это будет в итоге дольше). Или для простоты коллекцию можно держать в другом аналогичном параллельном словаре. Или вообще для ещё большей простоты завести 5 словарей :)
Анализируем текущие SName Line1 Line2 Line3 и запомненные, если изменились - обновляем и пишем случай в коллекцию, проверяем время и запоминаем бОльшее.
В конце цикл по любому словарю (по ключам) и выгрузка собранного (цикл по коллекции, собираем строку)
Будет быстро на любом количестве, хоть за полгода (только смотрите чтоб комментарий поместился) :)
 
Я дико извиняюсь, но мои познания не настолько сильны, поэтому читал сейчас про коллекции, словари и т.д. как будто инструкцию по управлению звездолетом  :o  . Мои познания в VBA на уровне "записать свои действия и кое-что подправить руками, добавив пару-тройку широко распространненных команд"... Можно пример + кратенький мануал, я попробую разобраться...
Изменено: yeti - 29.08.2013 22:21:23
 
Не, ничего похожего на эту задачу не помню...
Вот недавнее на словаре - но там задача другая:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=50744
 
Выкроил  :)  
Код в стандартный модуль в любой файл, выполняем на активном листе "Data" по alt+f8:
Скрытый текст

Что-то код чуть корёжится - поэтому приложил файл.
Изменено: Hugo - 29.08.2013 23:15:04
 
Вот оно - обыкновенное прикладное волшебство! Hugo, Вы гений. Протестил, все работает идеально. Самое обалденное, что в коде нет ничего супернавороченного, даже я - начинающий, понял логику, и, главное, работает влет! Спасибо огромное!!! :)
 
Старался  :)
Поэтому сделал 5 словарей, хотя можно всё запихнуть в один - но тогда более навороченно получается с ним работать.
Можно названия столбцов и названия событий в комментариях тоже брать из первого массива, или поместить их в переменные и использовать их (т.к. первичный массив a() в конце превращается в итоговый) - так будет динамичнее - вдруг там названия поменяются?
Только слово "Комментарий" останется в коде.
Ну и выгружать можно и в добавленный лист в эту же книгу - но я решил показать вариант с новой книгой, это чаще удобнее, её можно сохранить под любым удобным именем, или перенести получившийся лист куда угодно вручную.

P.S. Да, название tt конечно же можно заменить на какое угодно одно слово. :)
Изменено: Hugo - 30.08.2013 09:21:19
 
Да, адаптировал к "боевому" файлу, параллельно поправив пару очепяток в коде и реализовав обновление таблицы в самом файле вместо открытия новой книги. Все работает оч. ОК, да скорости хватает более чем. Еще раз спасибо.
Страницы: 1
Читают тему
Наверх