Доброго времени суток. Прошу прощения за нубство в VBA. Есть книга с переменным количеством строк. Здесь учет входа и выхода сотрудников из помещения. Нужно удалить все строки (сотрудников) которые вошли и вышли и оставить только тех кто вошел и не вышел. Предполагаю что можно ключевым сделать поле *Номер* т.к. он уникален и столбец *Событие* содержит информацию *Выход по идентификатору* или же *Вход по идентификатору*. Логически можно брать строку по порядку с *Номер* и если в *Событие* *выход* то её удаляем сразу, если *вход*, то ищем строку с таким же *Номер* и значением *выход*, при нахождении удаляем обе строки (со *вход* и *выход*) и так до конца таблицы иначе если есть строка с *Номер* с*вход* и нет *выход* то её оставляем. В итоге должны остаться записи которые имеют только *вход*. Кратко опишу ситуацию. В любой момент времени формируется отчет в Exel за произвольный период, в этом отчете нужно оставить только те записи которые вошли в помещение за этот период но еще не вышли. Еще раз прошу простить, но VBA для меня пока загадка.
Макрос удаления похожих строк, удаление строк с одинаковым значением поля.
24.10.2013 11:39:07
|
|
|
|
24.10.2013 11:53:07
Можно вот такой формулой в доп.столбце выделить тех, кто вошел, но не вышел.
После чего отсортировать и удалить. ЗЫ: Все, у кого есть 1 в доп. столбце - не вышли еще.
Изменено:
|
|||
|
|
24.10.2013 12:55:03
Формула считает "кол-во входов" минус "кол-во выходов". Если вх>вых, то ставит 1.
Или там есть "свои нюансы"? ЗЫ: Понял, в чем проблема. Но нужно подумать над алгоритмом, а времени нет. Подумаю, если появится возможность и вам еще не дадут ответа.
Изменено:
|
|||
|
|
24.10.2013 13:14:54
Скажите, как мог Лесин Игорь Генадьевич №6 войти в 10:48:51,
не выходя, зайти в 16:41:21 и выйти в 17:00:53 23.10.2013 |
|
|
|
24.10.2013 14:18:26
Исходил из того, что число записей по каждому человеку не может быть кратно "2" если человек в "зоне"
осталось добавить обработку последнего времени входа человека ):
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|
|
|
24.10.2013 15:51:46
Не-е-е, с такими исходными данными ничего путного не будет:
Батюкова Оксана Владимировна №70 два раза подряд вышла )8 Сначала нужно на баги исходные данные проверять, а уж потом обрабатывать Попробую, если никто не опередит (8
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|
|
|
24.10.2013 16:34:36
Согласен, косяк в данных....но их не исключить, потому как прога учета не отсеивает повторное прикладывания RF-карты, а женщины - такие женщины)) тогда алгоритм вижу такой. Если текущая строка имеет *Выход...*, тогда её удалить и перейти к следующей, иначе найти следующую строку с таким *Номер* и если она *Вход...*, тогда удалить текущую строку (потому что она не *Выход...* а значит *Вход...*) и искать следующую с *Номер* иначе удалить текущую и найденную. Начать заново.. если не понятно то могу по другому как нить описать идею))
Изменено: |
|
|
|
24.10.2013 16:37:50
А на ночь человек может остаться в зоне?
Или вход и выход в течении одного дня? |
|
|
|
24.10.2013 16:42:37
ps Еще бы сводными попытать счастие - мин и макс по дням. pps Хотя - есть встечная идея, точнее - предложение: объявите конкурс в соответствующем разделе -
Изменено:
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
|
|||
|
|
24.10.2013 16:56:54
to Z Наверное моя ошибка, что не довел всю суть)))) дело обстоит так, через КПП по РФ-картам проходит толпа народа, днем больше, ночью меньше. Интересует моментальное нахождение в зоне кого либо прошедшего по РФ карте. Т.Е. в любой момент, когда появится необходимость формируется отчет, например за сутки, 12 часов или же несколько часов, не важно, отчет в Exel в представленном выше виде. Хотелось навоять макрос (кнопочку *Личная книга макросов* ) по нажатию на которую на КПП могли видеть фамилии не вышедших сотрудников. Жаль, что вы считаете что я не пытаюсь научить сотрудников 1 раз прикладывать на входе и 1 раз при выходе РФ карту, это не мои головные боли))) Проблема моя, что я не знаю VBA.
И главное, я прошу помощи, а не оценку моих действий! |
|
|
|
24.10.2013 17:04:13
А нельзя эту хрень извините научить чтоб срабатывала в течении например минуты только один раз? Как у нас билеты в транспорте...
Тогда и друга по своему пропуску будет лень проводить Ну или при анализе все близкие по времени входы объединять/выкидывать, особенно если между ними не было выхода. |
|
|
|
24.10.2013 17:12:57
Так?
|
|
|
|
24.10.2013 17:14:59
to Hugo)) не все так просто))) во первых это режимная территория. Во вторых могут проходить по 3 человека, поэтому интервал не назначить. И время не важно, главное оставить записи которые вошли и не вышли!!!
|
|
|
|
24.10.2013 17:23:22
Файл не смотрел - некогда вникать.
Но по логике применим словарь - если вход, то добавляем в словарь, если выход - удаляем. В итоге выводим содержимое словаря. При таком подходе повторы роли не играеют. |
|
|
|
24.10.2013 17:34:09
Глянул. Но не проверял
|
|||
|
|
24.10.2013 17:54:13
Исходил из условия, что последняя дата и время по каждому человеку и определяют его присутствие/отсутствие в зоне. На ошибки в исходных данных в таком случае чихать (8
Изменено:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|
|
|
24.10.2013 18:05:35
А например Малиновская Екатерина Арвовна №64?
Согласитесь, на словаре всё как-то проще выглядит Ну и скорость работы на другом уровне.
Изменено: |
|
|
|
25.10.2013 08:59:29
Ребята, добрый день! Ещё раз благодарю вас за содействие!
to Ёк-Мок Есть все равно недочеты после обработки, например *Артемьев Денис Владимирович №25* (0:41:03 и последняя запись 0:32:08). Возможно потому что список заполняется (отсортирован) с нынешней даты по убыванию. to Hugo Чувак, пока в ручную просматриваю результат работы этого макроса, и нет нареканий)))) |
|
|
|
25.10.2013 09:13:19
офф
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|||
|
|
25.10.2013 09:24:52
Ну так там нечему ломаться и негде ошибиться, он прост как сатиновые трусы - если вход, то человек внутри (кладём в словарь). Если выход - значит снаружи (выкидываем из словаря).
Соответственно множественные входы-выходы на алгоритм не влияют. Как вариант - если внутри, то в item словаря пишем строку таблицы, если вышел - её стираем (в item). Затем в конце пробегаем по словарю и всем у кого есть номер строки по этому номеру пишем метку что он внутри. Или в item можно писать/стирать время входа - тогда в конце можно сразу получить список фамилий и время входа. |
|
|
|
25.10.2013 10:31:34
iawi, действительно,- у Вас более подходящего слова не нашлось?
|
|
|
|
25.10.2013 10:53:49
to ikki
to Юрий М ))) смотрю тут любят по обсуждать написанные слова, хотя по теме не слова((( ))) to Hugo Огромная благодарность, действительно логика со словарем гораздо быстрее и точнее работает., еще раз спасибо, ЧУВАК (надеюсь это слово тебя не смущает)) )!!! Всех благодарю!!! Тему можно закрыть! |
|
|
|
25.10.2013 10:59:34
Взял да руками посчитал. И вот: сейчас в зоне 42 человека. Мой список только 17 человек, у Hugo 70 человек. Макрос от Jom не смог запустить... Приз взял sva! Вир гратулирен дих!
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР. |
|
|
|
25.10.2013 11:22:58
Ну не знаю - вторая же "Алупова Галина Васильевна №79" почему не зафиксирована у sva?
|
|
|
|
25.10.2013 11:35:19
До человека не доходит. Но это и естественно...
iawi загляните сюда, прям Ваш портрет:
Я сам - дурнее всякого примера! ...
|
|
|
|
25.10.2013 11:38:21
Если будете продолжать в том же духе - получите бан. |
||||
|
|
|||