Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2019, 19:40   #1
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию прошу помочь с обработкой массива данных

Добрый день!

В общем задача следующая:

В рамках заявки создается несколько нарядов. Наряд может создаваться как одним сотрудником, так и разными. В датах, которые относятся к разным годам/месяцам.

Нужно посчитать наряды по сотрудникам и по датам в следующей логике:

Если в рамках одной заявки с даты создания предыдущего наряда прошло более 30 дней, то наряд засчитывается. Если менее 30 дней, то наряд считается дублем и не учитывается.


Пример:

Цитата:
Номер заявки;Номер наряда;ФИО сотрудника;Дата создания наряда;;Флаг
Заявка 1 ;Наряд 1;Сотрудник 1;06.06.2019;;ИСТИНА
Заявка 1 ;Наряд 2;Сотрудник 2;07.07.2019;;ИСТИНА
Заявка 1 ;Наряд 3;Сотрудник 1;09.07.2019;;ЛОЖЬ
Прошу помощи. Зашел в ступор, не знаю с какой стороны подступиться к решению.
Если формулы массива, то наряд с минимальной и максимальной датой в рамках заявки я еще могу найти, а как искать все промежуточные? А потом находить разницу в днях? как искать разницу между 2м и 3м? или 3м и 4м?

Если на VBA... представляется куча вложенных циклов... а если строк вдруг станет больше? и вобще больше на костыль смахивает. поделитесь экспертным мнением, возможно натолкнете меня на верную мысль.

Расчет нужно делать в рамках одного месяца по сотрудникам. около 5к строк получается. выборка делается по всем нарядам из заявок в которых есть наряд с датой создания в месяце для которого делается расчет

Последний раз редактировалось unbanned; 31.07.2019 в 21:01.
unbanned вне форума Ответить с цитированием
Старый 31.07.2019, 22:34   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

написано много. понятно мало
Прикрепите пример исходный данных в файле Excel
Покажите, в какой ячейке (в каком столбце) какой результат надо получить
Тогда, может, кто-нибудь поймёт что надо, и подскажет.
EducatedFool вне форума Ответить с цитированием
Старый 31.07.2019, 23:10   #3
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

на мой взгляд написано достаточно понятно... что же, со стороны виднее.

еще раз обстоятельно и сначала.

Есть выборка данных. Смысловая нагрузка следующая:

Создается заявка, в рамках заявки создается заказ-наряд. Но позднее могут создать еще один заказ-наряд в рамках этой же заявки. Срок "жизни" наряда принимаем за 30 дней. Т.е. если в период 30 дней c даты создания наряда создан еще один в рамках этой же заявки, то такой заказ-наряд считается дублем. т.к. предыдущий еще "живой" (ему необходимо поставить флаг="ЛОЖЬ"). Если создается заказ наряд по истечение более 30 дней от предыдущего, то он считается уникальным т.к. предыдущий наряд уже "мертвый" (флаг = "ИСТИНА").


прикладываю xlsx. с примерным набором данных, понятно что номера заказа и номера заявки цифровые значения.

по итогу мне нужно проставить флаг для каждого наряда исходя из выше описанной логики. формулами, макросом или еще как-то. у меня сложность в том, что я не могу придумать как это сделать кроме как тупого перебора. берем заявку, находим все наряды связанные с ней, ищем наряд с минимальной датой ему ставим истину, находим следующий, находим разницу в днях между их датами создания, проверяем более ли она 30 дней и так далее. но это не эффективно, вот и решил поискать совета у более опытных товарищей.
Вложения
Тип файла: xlsx Пример.xlsx (14.4 Кб, 10 просмотров)

Последний раз редактировалось unbanned; 31.07.2019 в 23:44.
unbanned вне форума Ответить с цитированием
Старый 31.07.2019, 23:58   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см. колонка Флаг
Код:
=ИЛИ(RC[-1]=З1;RC[-1]-З1>30)
Вложения
Тип файла: xlsx Пример (35).xlsx (14.9 Кб, 9 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.08.2019, 00:09   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
см. колонка Флаг
Код:
=ИЛИ(RC[-1]=З1;RC[-1]-З1>30)
Спасибо, но работает не совсем как нужно. для 4й строки не верно(
unbanned вне форума Ответить с цитированием
Старый 01.08.2019, 01:08   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

понял 09.07 является дублем по отношению к 07.07, а не к 06.06...
Вложения
Тип файла: xlsx Пример (35).xlsx (15.0 Кб, 10 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.08.2019, 01:13   #7
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
понял 09.07 является дублем по отношению к 07.07, а не к 06.06...
ухх, сильная формула! спасибо большое. буду разбираться и тестировать
unbanned вне форума Ответить с цитированием
Старый 01.08.2019, 01:34   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

формула там в диспетчере имен, которая определяет З1, дату предыдущего наряда по текущей заявке
(там без водки не разобраться)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++]: Прошу помочь написать комментарии к задаче о сортировке массива методом слияния Никита757 Помощь студентам 0 28.12.2015 20:27
Нужна помочь с обработкой данных LLe Visual C++ 0 23.11.2015 13:03
Прошу помочь с копированием данных vist17 Microsoft Office Excel 1 12.06.2009 11:46
Прошу помочь с слиянием данных Neyron Microsoft Office Excel 19 04.06.2008 09:11