Добрый день! Я так понимаю данную задачу можно выполнить только с помощью макроса (в макросах вообще 0) по этому прощу помощи.
Собственно суть. ЛИСТ 1 Есть Столбцы C,D с данными. Есть столбец G в котором должна быть Разница между С и D при условии что обе даты присутствуют и дата Следующей больше даты Последней (подробнее в файле) Есть столбец H в котором должны проставляться статусы. (логика статусов описана в столбце I) В ячейке J1, дата (она будет в этой ячейках всегда и меняться в зависимости от даты выгрузки и т.д.) чтобы макрос учитывал эти даты. ЛИСТ 2 Можно использовать как справочник для названия статусов и проставления даты. Ну чтобы можно было изменить название статуса не залезая в макрос. ЛИСТ 3 что должно быть в итоге, это если не делать лист 2 (если делать лист 2 то просто не будет столбца J)
P.S. Не уверен в название темы, если не подходит попытаюсь придумать новое. файл пример прикладываю, в нём всё более подробно описано. в файле на листе 1 реальный пример исходных данных выгружаемых из программы для примера оставил 1500 строк, в реальном же файле их может быть до 300 тысяч строк.
26.10.2018 Попытался сделать формулами как посоветовал JayBhagavan но Формула ЕСЛИ я так понимаю учитывает приоритет условий, у меня же приоритета нет, все условия уникальны, и может быть только 1 статус.
UPD РЕШЕНИЕ
Код
=СЦЕПИТЬ(ЕСЛИ(И(НЕ(ЕПУСТО($C2));$C2<$D2);"Всё хорошо";"");ЕСЛИ(И(НЕ(ЕПУСТО($D2));$C2>$D2);"Дата последней гос поверки больше даты следующей";"");ЕСЛИ(И(ЕПУСТО($D2);$C2<$J$2;$C2<>$D2);"Нет даты следующей гос поверки";"");ЕСЛИ(И(ЕПУСТО($D2);$C2>$J$2);"Дата последней гос поверки больше текущей даты НЕТ Следующей";"");ЕСЛИ(И(ЕПУСТО($C2);$D2<$J$2;$C2<>D2);"П/У НЕ ДЕЙСТВУЕТ";"");ЕСЛИ(И(ЕПУСТО($C2);$D2>$J$2);"П/У ДЕЙСТВУЕТ но нет ДАТЫ ПОСЛЕДНЕЙ ГОС.ПОВЕРКИ";"");ЕСЛИ(И(ЕПУСТО($C2);ЕПУСТО($D2));"НЕТ ДАТ ВООБЩЕ";""))
JayBhagavan написал: Нет даты в столбце "D" Дата последней гос поверки "C", больше текущей даты (ячейка J2), и нет даты следующей поверки "D"
1) Дата в С 01.10.2003 D нет даты - постараюсь перефразировать "Нет даты в столбце D но дата в столбце С меньше чем дата в J1"
2) Дата в С 01.11.2023 D нет даты - тут получается на оборот "Нет даты в столбце D но дата в столбце С меньше чем дата в J1"
Соответственно случаи разные, возможно для понимания приведу аналогию (названия столбцов последняя и следующая гос поверка = когда ты кушал последний раз и когда будешь кушать следующий раз, понятно что последний раз я не мог поесть в 2023 году )
Цитата
JayBhagavan написал: Также 1е условие исключает: Нет дат в столбце "С" и "D"
Не совсем понял какое первое условие исключает.
Цитата
JayBhagavan написал: Дата ввода в эксплуатацию, больше даты J3
Прошу прощения забыл убрать это условие . (Для удовлетворения интереса), Была миграция БД из сторонней в нашу, и там надо проверять определённые даты. потом дошло что это можно сделать фильтром секунд за 15.
Файлик перезалил в сообщение 1, без этого условия.
Wild.Godlike, пример формулы я Вам привёл. Пробуйте адаптировать под свою задачу. Или попробуйте построить с нуля по такому алгоритму: - пишите ЕСЛИ() для первого по приоритету условию, для ИСТИНА задаёте, что должно вернуть, а для ЛОЖЬ оставляете пустым. Ввели формулу в ячейку; - заходите в написанную формулу и для пустого поля ЛОЖЬ начинаете писать ЕСЛИ() для следующего по приоритету условию; и так далее.
JayBhagavan,Попробовал Сделать как вы посоветовали, если я правильно понял как разобрался сам и то что написали вы, формула ЕСЛИ учитывает приоритет, в моём же случае приоритета нет, все условия уникальны, если же использовать формулу ЕСЛИ, то тогда да по приоритету условия пересекаются, от сюда делаю вывод что формула не подходит.
P.S. в приложеном файле написал формулу ЕСЛИ под каждый отдельный случай, может это у меня не получается объединить всё в одну формулу.
Wild.Godlike, то есть в одной ячейке может быть несколько статусов? Если да, тогда напишите несколько ЕСЛИ() внутри СЦЕПИТЬ(). Например: =СЦЕПИТЬ(ЕСЛИ(условие1;Статус1;"");ЕСЛИ(условие2;Статус2;"");...;ЕСЛИ(условиеN;СтатусN;""))
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
JayBhagavan,Нет в одной ячейке может быть только один статус. Всё же я справился надо пользоваться ещё Функией И, и внутри задавать несколько логических значений с условием ЕПУСТО и <>
Код
=СЦЕПИТЬ(ЕСЛИ(И(НЕ(ЕПУСТО($C2));$C2<$D2);"Всё хорошо";"");ЕСЛИ(И(НЕ(ЕПУСТО($D2));$C2>$D2);"Дата последней гос поверки больше даты следующей";"");ЕСЛИ(И(ЕПУСТО($D2);$C2<$J$2;$C2<>$D2);"Нет даты следующей гос поверки";"");ЕСЛИ(И(ЕПУСТО($D2);$C2>$J$2);"Дата последней гос поверки больше текущей даты НЕТ Следующей";"");ЕСЛИ(И(ЕПУСТО($C2);$D2<$J$2;$C2<>D2);"П/У НЕ ДЕЙСТВУЕТ";"");ЕСЛИ(И(ЕПУСТО($C2);$D2>$J$2);"П/У ДЕЙСТВУЕТ но нет ДАТЫ ПОСЛЕДНЕЙ ГОС.ПОВЕРКИ";"");ЕСЛИ(И(ЕПУСТО($C2);ЕПУСТО($D2));"НЕТ ДАТ ВООБЩЕ";""))
Товарищи прошу прощения что опять поднимаю тему но возникла необходимость. В тестовом файле формула работает идеально 1500 строк....... всё как надо Но если строк становится больше чем 50000 происходит вот это..... gyazo - записал гифку для лучшего понимания, в скриншотах не знаю как показать, а приложить файл с количеством строк когда это случается ни как почти 10мб весит..... Нажимал F9, shift+f9 и т.д. ничего не помогает пока в ручную на дату не клацну.... Подскажите как решить проблему?
P.S. Модераторы если надо создать новую тему я создам.