Страницы: 1
RSS
Проставление статусов и разницы дат по условию макросом.
 
Добрый день! Я так понимаю данную задачу можно выполнить только с помощью макроса (в макросах вообще 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));"НЕТ ДАТ ВООБЩЕ";""))
Изменено: Wild.Godlike - 26.10.2018 16:03:02
 
Wild.Godlike, поправьте если я чего не понял. Вам надо согласно условий:
Скрытый текст

Чтобы на листе "1" заполнялось поле "Статус"?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, да вы всё верно поняли.
 
Условия пересекаются:
Цитата
Нет даты в столбце "D"
Дата последней гос поверки "C", больше текущей даты (ячейка J2), и нет даты следующей поверки "D"
Если первое в приоритет, то они исключает второе. И смысла во втором никакого.
Также 1е условие исключает:
Цитата
Нет дат в столбце "С" и "D"
Следующее не понятно:
Цитата
Дата ввода в эксплуатацию, больше даты J3
почему J3, а не J2???
+++
Статусы исключены из формулы
Формула:
=ЕСЛИ(И($C2<$D2;$D2>$J2);"Всё хорошо";ЕСЛИ(НЕ(ЕЧИСЛО(ДАТАЗНАЧ($D2)));"Нет даты следующей гос. Поверки";ЕСЛИ($C2>$J2;"Дата последней гос поверки больше текущей даты";ЕСЛИ(И(НЕ(ЕЧИСЛО(ДАТАЗНАЧ($C2)));$D2<$J2);ЕСЛИ(И(НЕ(ЕЧИСЛО(ДАТАЗНАЧ($C2)));$D2>$J2);"Нет даты последней гос. Поверки (ПУ ДЕЙСТВУЕТ)";ЕСЛИ($D2<$J2;"Дата следующей гос. Поверки меньше даты из ячейки J2";ЕСЛИ($E2>$J2;"Дата ввода больше даты проверки(J3)";"-=???=-")))))))
Изменено: JayBhagavan - 25.10.2018 15:02:19

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
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 - 25.10.2018 15:47:50

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Спасибо, попробую разобраться :)
 
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));"НЕТ ДАТ ВООБЩЕ";""))
Изменено: Wild.Godlike - 26.10.2018 16:02:47
 
Товарищи прошу прощения что опять поднимаю тему но возникла необходимость.
В тестовом файле формула работает идеально 1500 строк....... всё как надо
Но если строк становится больше чем 50000 происходит вот это.....
gyazo - записал гифку для лучшего понимания, в скриншотах не знаю как показать, а приложить файл с количеством строк когда это случается ни как почти 10мб весит.....
Нажимал F9, shift+f9 и т.д. ничего не помогает пока в ручную на дату не клацну....
Подскажите как решить проблему?


P.S. Модераторы если надо создать новую тему я создам.
Изменено: Wild.Godlike - 26.10.2018 21:21:53
Страницы: 1
Наверх