Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Выборка по датам
 
Вот итоговое решение задачи. Ни один из вариантов выше не выдал четкого решения. Я все же пришел к тому, что прорешал все сам и вывел нужные неравенства. На картинке ниже видны все варианты решения задачи при любом выбранном диапазоне дат, в течение которых нужно понимать, действовал тот или иной документ или нет.

Обозначения:
StY - год введения документа в действие - Start Year;
EndY - год отмены документа - End Year (если EndY=0, это значит, что даты отмены нет, документ действует до сих пор);
StP - год начала периода выборки - Start Period;
EndP - год окончания выборки End Period.

Тогда, после рассмотрения всех возможных ситуаций, после упрощения систем неравенств, логика будет как на картинке.
Ну а дальше - очень просто все это записать в код программы:
Код
Sub Exist_or_NO()
Dim rows As Long, StY, EndY, StP, EndP As Integer 'Определим переменные

rows = Cells(1, 1).End(xlDown).Row 'определим последнюю заполненную строку в таблице

StP = ThisWorkbook.Worksheets("Реестр").Cells(2, 7) 'Берем из ячейки (2;G) на листе год начала периода отсева
EndP = ThisWorkbook.Worksheets("Реестр").Cells(2, 8) 'Берем из ячейки (2;H) на листе год окончания периода отсева

'запускаем обработку
For r = 5 To rows
    StY = Val(Right(ThisWorkbook.Worksheets("Реестр").Cells(r, 6), 4)) 'Из даты введения в действие (находится в столбце F) выдергиваем год
    EndY = Val(Right(ThisWorkbook.Worksheets("Реестр").Cells(r, 7), 4)) 'Из даты отмены (находится в столбце G) выдергиваем год. Если там пусто, то получаем ноль.

'проверяем все условия с картинки, в столбец "H" напротив каждого документа пишем, действовал он или нет в заданном периоде дат (между StP и EndP) 
    If StY <= EndP And EndY = 0 Then ThisWorkbook.Worksheets("Реестр").Cells(r, 8) = "Действовал"
    If EndY >= StP And EndY <= EndP Then ThisWorkbook.Worksheets("Реестр").Cells(r, 8) = "Действовал"
    If StY <= EndP And EndY > EndP Then ThisWorkbook.Worksheets("Реестр").Cells(r, 8) = "Действовал"
    If StY > EndP Then ThisWorkbook.Worksheets("Реестр").Cells(r, 8) = "Не действовал"
    If EndY < StP And EndY <> 0 Then ThisWorkbook.Worksheets("Реестр").Cells(r, 8) = "Не действовал"
Next r
End sub
Код на удивление быстро работает, а для разового применения - вообще замечательно.

Главное - что все корректно определяется. Да, криво написано, да, ручками, да, может не сильно профессионально, но задача решена )))
Выборка по датам
 
Цитата
написал:
у кого неправильно? )
Отформатировал текст в даты, и именно Ваш вариант работает отлично теперь вроде бы, я понял, в чем была проблема )) Спасибо за помощь!
Выборка по датам
 
Цитата
написал:
Я исходил из того, то если даты отмены нет значит еще действует.
Именно так.

В цитатах противоречий нет. Если вспомнить школьную математику, то интервал может быть ограничен с двух сторон, а может быть ограничен только с одной стороны. Документ, введенный в действие в 2019 и не отмененный - это интервал, ограниченный слева годом 2019, а справа - не ограничен ничем, следовательно, он полностью перекрывается с интервалом сравнения 2020-2023.
Цитата
написал:
Потом применяя логику: если дата ввода меньше 01.01.2020 и нет даты отмены - "не действовал", то логичный вопрос: Если, допустим, дата ввода 31.12.2019, то в этот день была отмена?
Если дата ввода меньше 01.01.2020 и нет отмены - действовал.
Если дата ввода 31.12.2019 и нет даты отмены - действовал.

Если когда-то был отменен, то будет дата отмены, и если она позже 01.01.2020, то действовал.

Цитата
написал:
Далее в примере местами вместо дат текст - я это сразу не проверял
А вот это я проверю. Вообще-то лист генерируется скриптом из другой базы данных. Проверю, спасибо за наводку!
Выборка по датам
 
БМВ, Ничего, бывает )) Хорошей недели рабочей!

А по поводу задачи, появилась у меня идея относительно простая, как реализую - напишу здесь и тему можно будет закрывать.
Выборка по датам
 
Цитата
написал:
Во Вьетнаме самая популярная фамилия Нгуен,  В Китае тоже до чёртикоав однофамильцев. Как  вы полагаете стоит ли задумываться о функции которая сможет отличать Иванова Ивана от Ивана Иванова  ??? Иными словами, уникальные идентификаторы не зря придуманы.
А при чем тут фамилии?
Просто думаю, что задача определения, пересекаются ли временные интервалы, довольно часто возникает. И не только временные, например, поле рассеяния действительных размеров детали пересекаются ли с полем допуска на размер? Задача-то об этом )
Выборка по датам
 
БМВ, Могут, но уже попроще анализировать большую таблицу. Хоть так..

Я вот подумал, что решать, наверное, нужно будет иначе, через VBA и игры со строками с датами. Иначе никак не выходит.

А вообще, странно, что в экселе нет простой функции, реализующей эту простую задачу, конечно. Хотя, может быть, просто мы о ней не знаем )
Изменено: Aiden_ko - 10.12.2023 20:30:04
Выборка по датам
 
АlехМ, интересная задачка получилась )) Каждый метод дает свои результаты )) Но спасибо, это уже поможет быстрее отсортировать, если несколько методов одинаково сработали, то перепроверять уже не надо.
Выборка по датам
 
DAB, не-а

Есть документы, введенные в действие в 2019, не отмененные до сих пор, а Ваша формула для них выдает ЛОЖЬ. См скриншот.

Не выходит так, нужно как-то смотреть диапазон дат введения в действие и отмены действия (если есть такое), или если дата введения в действие неизвестна, то полагать ее нулевой, а справа смотреть дату отмены, если она есть, и искать пересечение данного диапазона с заданным (2020-2023). Если они пересекаются, то истина, если нет - то ложь.

Вот как это сделать - не понимаю.

Всего скорее тут лучше на VBA работать, пусть даже код будет не самым производительным, не важно, задача разовая, но надо перешерстить базу из больше чем 2000 документов, изменяя заданный диапазон.
Изменено: Aiden_ko - 10.12.2023 01:14:14
Выборка по датам
 
Цитата
написал:
?
Не-а, нужно учитывать обе даты, а не только одну. Потому что документ может быть введен в действие до заданного диапазона и действовать до сих пор, второй мог быть введен до диапазона, в нем заменен на второй, и оба важно отразить, они же в заданный период действовали.

Если бы мне надо было показать ТОЛЬКО введенные в действие в данный период, либо ТОЛЬКО отмененные в нем - это было бы очевидно.
Выборка по датам
 
Цитата
написал:
А что значит случай когда нет даты введения в действие?
Это означает, что дата введения в действие неизвестна. Пусть будет Рождество Христово - не важно, в базе есть изначально неидентифицированные датой введения в действие документы.

Файл с датами прилагаю.
Выборка по датам
 
Уважаемые коллеги, прошу помощи.

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

Вопрос:

Нужно автоматизировать заполнение последнего столбца - действовал ли каждый документ в заданный диапазон дат или нет? Суть в том, что если нет даты отмены, то документ действует до сих пор. Но может быть и такое, что какая-то версия документа действовала в указанный период, но потом была заменена, и обе эти версии должны попасть в заданный диапазон.

Можете предложить варианты? Я чего-то не могу сообразить, задача вроде простая. Решение устроит либо на уровне формул в ячейках, но лучше на VBA, т.к. перечень документов формирует движок на VBA.
Изменено: Aiden_ko - 09.12.2023 23:42:53
Подтягивание списка пользователей из ActiveDirectory на лист Excel
 
Уважаемые коллеги, поиск по форуму не помог, поэтому задаю вопрос.

Как можно подтянуть список пользователей из ActiveDirectory в столбец на лист Excel, находясь внутри области действия LAN c AD?

Функционал нужен для автоматического формирования актуального списка пользователей внутренней сети предприятия. Уровни прав доступа пока не сильно интересуют, важно понять механизм.

Или где про это почитать можно? Желательно с примерами.
Подтягивание списков из Excel в Combobox'ы в документе Word
 
БМВ,Thnx, буду изучать, но уже больше для себя.

На уровне корпоративном у меня только VBA есть. Видимо, придется решать задачу исключительно силами Excel. Проблема в том, что все должно работать на уровне пакета MS Office, установленного на всех компьютерах организации, standalone  приложения не прокатят. Как не прокатят и надстройки.

В соответствии с правилами Форума про ActiveDirectory задам вопрос в отдельной теме.
Изменено: Aiden_ko - 22.09.2021 22:11:49
Подтягивание списков из Excel в Combobox'ы в документе Word
 
Подскажите, пожалуйста, что есть ADO, и где про него порекомендуете почитать в разрезе именно данного вопроса.  
Изменено: vikttur - 22.09.2021 21:29:18
Подтягивание списков из Excel в Combobox'ы в документе Word
 
Мне не надо чистый работоспособный код, просто может есть материалы, где на эту тему почитать можно? В Excel умею, связывать с Word - не очень. А информации по теме в сети не могу найти, только ручное заполнение списков в Word, но это, понятное дело, не подходит, ибо списки имеют свойство изменяться.
Изменено: Aiden_ko - 22.09.2021 20:44:54
Подтягивание списков из Excel в Combobox'ы в документе Word
 
Уважаемые, в продолжение темы сортировки по фамилиям, бьюсь уже несколько дней. Файл со списками в Excel есть, теперь надо подвязать чтобы списки из него подгружались в документ Word в комбобоксы.

Задача - быстро формировать листы согласования для локальных документов, в общем, форма Word и файл с примером списков - в приложении. Есть идеи как это сделать? Я впервые пытаюсь, опыта автоматизации в ворде нет от слова совсем, поэтому уже готов плюнуть и сделать все в чистом экселе, но хочется получить новые знания про ворд )

Соответственно, в левой части документа WORD в каждом комбобоксе должны быть все должности из списка, в правой части - в каждом комбобоксе все фамилии из списка Excel

Заранее спасибо!
Сортировка по фамилиям без учета инициалов
 
New, Гениально! Спасибо огромное! )))
Сортировка по фамилиям без учета инициалов
 
New, все так, но одно НО, инициалы должны оставаться на своем месте, т.е. слева от фамилии.
Сортировка по фамилиям без учета инициалов
 
Цитата
alexleoix написал: Есть решение на PQ. Надо? или только vba рассматриваете?
Только VBA, надо вписать в существующий уже большой проект.

Цитата
Бахтиёр написал: если excel 365:=СОРТПО(D5:D10;ПСТР(D5:D10;7;99))
Ecxel 2019, и надо решить вопрос не формулой на листе, а через VBA
Скопировать данные конкретных столбцов из одной таблицы в другую
 
Попробуйте логику вот такую:

Код
DirName = 'указываем папку где лежит исходный файл в кавычках, либо ссылку на ячейку, где записан адрес папки
FileN = DirName & "\[название файла-донора].xlsx"
'Открываем файл-донор в режиме ReadOnly

Workbooks.Open Filename:=FileN, ReadOnly:=True
Set wb = ActiveWorkbook

'Делаем что хотим с ним, например, нам надо в нашу книгу в ячейку А1 листа 1 из донора перетащить ячейку B2 с листа 4:

ThisWorkbook.WorkSheets("Лист 1").cells(1,1)=wb.WorkSheets("Лист 4").cells(2,2)

'Ну и пока книга-донор открыта, обращаться к ней можно через объект wb, хоть циклами оттуда данные тащите, хоть столбцами и строками, как угодно. 
'Донор открыт в ReadOnly, так что исходные данные в нем не пострадают, что бы вы не сделали.
'как только все данные перетянули в свою книгу, донора надо закрыть:

wb.Close
При этом донор откроется именно на период вытаскивания из него данных, не надо держать его открытым постоянно. Мне такой подход удобен тем, что так реализовал формирование реестра документов из сетевого источника, который формируется независимо, т.е. я запускаю свою книгу, запускаю макрос, он подтягивает из локальной сети донора, открывает его в ридонли, перетаскивает из него то что мне надо и закрывает его. Тот, кто работает с донором в этот момент напрямую в нем, даже не замечает, что из этого файла что-то кто-то скопировал себе.
Изменено: Aiden_ko - 17.09.2021 18:41:08
Сортировка по фамилиям без учета инициалов
 
Добрый день.

Существует проблема. Список сотрудников (более 200 человек) в формате "И. О. Фамилия", т.е. сначала идут инициалы, затем фамилия.

Задача - отсортировать список по алфавиту по критерию фамилии средствами VBA.
Знаю, что можно разделить данные по столбцам, потом сортировать диапазон, потом собрать все снова в один столбец, но это "костылинг". Есть идеи?

Файл для примера прилагаю.
Изменено: vikttur - 17.09.2021 20:34:03
Страницы: 1
Наверх