PDA

Показать полную графическую версию : Проблема при сравнении дат в Excel


ДмитрийБел
13-04-2015, 12:38
Здравствуйте!

Через программу выгружаю заданный массив данных в Excel и уже провожу различные вычисления в Excel. Возникла проблема, следующего вида:

Сравниваю две даты через функцию "ЕСЛИ". Последняя дата в колонке должна быть больше первой, если это так, то пишется "правда", а если нет, то "ложь". Как видим на скрине 01.04 больше, чем 23.03, но при это пишется "ложь!", вместо "правда".
http://storage1.static.itmages.ru/i/15/0410/h_1428670763_8857539_e86eda8c44.png

Далее идем в первую сравниваемую колонку и просто нажимаем на нее (редактируем) и нажимаем снова "enter" (сохраняем изменения)
http://storage2.static.itmages.ru/i/15/0410/h_1428670777_1483344_382c8030a4.png

и видим следующее:
http://storage3.static.itmages.ru/i/15/0410/h_1428670787_5862343_6a7ab6ebc5.png

Выражение считает уже правильно!!!
Менять формат ячеек - не помогает. Пробовал в разных версиях работать - 2003 и 2007, но результат один и тот. В ручную каждую запись изменять и проводить такие операции, когда записей тысячи и на постоянной основе обработка идет - не вариант... Если даты в одном месяце, то сравнение идет по умолчания правильное. Может кто подскажет, как можно выйти из данной ситуации. За ранее спасибо!!!

Iska
13-04-2015, 13:12
ДмитрийБел, дело за малым — упакуйте образец Вашей рабочей книги, приведённой на скриншоте, в архив и выложите последний здесь или на RGhost.

ДмитрийБел
13-04-2015, 13:51
Вот:

Iska
13-04-2015, 14:18
ДмитрийБел, у Вас в столбце «IssueDate» не числовые данные, а текстовые. Посему никакие манипуляции с форматом отображения не дадут результата.

Самый простой способ перевести из текста в число (коим и является в реальности дата) следующий:

введите в какую-либо пустую ячейку (например, в «L2») число «1»;
скопируйте эту ячейку в буфер обмена;
выделите потребный диапазон («I2:I48»);
сделайте специальную вставку (\Правка\Специальная вставка… — для Office 2003);
в диалоговом окне «Специальная вставка…» укажите следующее:

http://i.imgur.com/WKvpXOV.png
Затем отформатируйте числовые значения в ячейках как дату.

Конечно, самым правильным будет по возможности настроить Ваше приложение, из которого Вы осуществляете экспорт, так, чтобы в ячейках с датой были именно числовые значения дат, а не текст в виде даты.

okshef
13-04-2015, 14:34
ДмитрийБел, попробуйте перед J2 и I2 в вашей формуле сравнения поставить "--", т.е.
=если(--J2>--I2;"правда";"ложь!")

Iska
13-04-2015, 14:43
okshef, правильно ли я понимаю, что:

Это тоже попытка перевода в число.
И автору достаточно будет «--» только перед «I2»?

okshef
13-04-2015, 15:07
1. Да
2. Я поправил пост

Возможно (не на чем сейчас проверить) достаточно даже J2-I2>0

Iska
13-04-2015, 15:21
okshef, спасибо, ясно. Значит, итоговый вывод таков: необходимо и достаточно любым возможным способом привести текстовое значение к числу.

Возможно (не на чем сейчас проверить) достаточно даже J2-I2>0 »
Да, достаточно. Я проверил.

ДмитрийБел
13-04-2015, 18:34
Спасибо большое!!!
Можно использовать одно на выбор из двух вариантов?

=ЕСЛИ(--J2>--I2;"правда";"ложь")
или
=ЕСЛИ(J2-I2>0;"правда";"ложь")

Последнее выражение не понятно, но главное работает!

Может ещё подскажете два вопроса:
1) можно ли вместо "ложь", чтобы ячейка закрашивалась в красный цвет, к примеру? Нашел формулу для определения цвета заливки ячейки, а на заливку нет.
2) можно ли через "ЕСЛИ" сравнивать два значения в одной ячейке т.е. J2>I2 и J2>H2 - если сохраняются два условия сразу, то "правда"?

Iska
13-04-2015, 20:01
Последнее выражение не понятно, но главное работает! »
Любое. И там, и там происходит то же самое, что я описал выше, но только на уровне формулы, а не исходной ячейки.

В первом случае происходит перевод текстового содержимого ячейки в число посредством двух унарных операций «-» (насколько я это понимаю), причём для обеих целевых ячеек. Во втором случае также происходит неявное преобразование в процессе вычисления разницы между значениями ячеек — как я понимаю, среда производит попытку неявного преобразования значения ячеек из текста в число.

1) можно ли вместо "ложь", чтобы ячейка закрашивалась в красный цвет, к примеру? Нашел формулу для определения цвета заливки ячейки, а на заливку нет. »
Можно. Задайте результат не как текст, а, например, как булевы значения:
=ЕСЛИ(--J2>--I2;ИСТИНА;ЛОЖЬ)
или даже просто:
=--J2>--I2
затем используйте для ячеек «Условное форматирование».
2) можно ли через "ЕСЛИ" сравнивать два значения в одной ячейке т.е. J2>I2 и J2>H2 »
Нет, нельзя. Используйте такую функцию рабочего листа для операции:
=И(--J2>--I2;--J2>--H2)
и соответственно вся формула будет выглядеть как:
=ЕСЛИ(И(--J2>--I2;--J2>--H2);ИСТИНА;ЛОЖЬ)

ДмитрийБел
14-04-2015, 15:35
Можно. Задайте результат не как текст, а, например, как булевы значения: »
Iska, спасибо! А нельзя ли как через команду и без дополнительных движений это всё сделать?
Вместо "ложь" формулу какую (условно привожу) =ЗАЛИВКА(#FF15), где #FF15 - красный цвет.
Вся формула, чтобы была такая:
=ЕСЛИ(--J2>--I2;"правда";"=ЗАЛИВКА(#FF15)")
Или такие формулы и сложные конструкции в Excel отсутствуют?

Iska
14-04-2015, 16:35
В Excel из комплекта 2003-го Office'а такого нет. Форматирование — это форматирование, данные — это данные. По новым версиям подскажут знающие коллеги.

А что Вы имели в виду под этим:
Нашел формулу для определения цвета заливки ячейки »
?

ДмитрийБел
14-04-2015, 21:22
В Excel из комплекта 2003-го Office'а такого нет. »
2007 используется, а на скринах тренеровался на другом ПК с 2003.
? »
Функция возвращает код цвета заливки указанной ячейки.
=ЦВЕТЗАЛИВКИ() и в скобках указать необходимую ячейку.

Разобрался я.))) Это надстройка для Excel (VBA-Excel), которая расширяет функции т.е. нужно скачивать и подвязывать к Excel.

Iska
14-04-2015, 21:52
Я так примерно и понял, что это на самом деле внешняя функция VBA, а не встроенная. Я её видел в результатах поиска то ли на второй, то ли на третьей странице. Ну, и вроде как они там денюжку хотят за эту надстройку, хотя, полагаю, при большом желании можно и самому написать.




© OSzone.net 2001-2012