Показать полную графическую версию : Проблема при сравнении дат в 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, но результат один и тот. В ручную каждую запись изменять и проводить такие операции, когда записей тысячи и на постоянной основе обработка идет - не вариант... Если даты в одном месяце, то сравнение идет по умолчания правильное. Может кто подскажет, как можно выйти из данной ситуации. За ранее спасибо!!!
ДмитрийБел, дело за малым — упакуйте образец Вашей рабочей книги, приведённой на скриншоте, в архив и выложите последний здесь или на RGhost.
ДмитрийБел
13-04-2015, 13:51
Вот:
ДмитрийБел, у Вас в столбце «IssueDate» не числовые данные, а текстовые. Посему никакие манипуляции с форматом отображения не дадут результата.
Самый простой способ перевести из текста в число (коим и является в реальности дата) следующий:
введите в какую-либо пустую ячейку (например, в «L2») число «1»;
скопируйте эту ячейку в буфер обмена;
выделите потребный диапазон («I2:I48»);
сделайте специальную вставку (\Правка\Специальная вставка… — для Office 2003);
в диалоговом окне «Специальная вставка…» укажите следующее:
http://i.imgur.com/WKvpXOV.png
Затем отформатируйте числовые значения в ячейках как дату.
Конечно, самым правильным будет по возможности настроить Ваше приложение, из которого Вы осуществляете экспорт, так, чтобы в ячейках с датой были именно числовые значения дат, а не текст в виде даты.
ДмитрийБел, попробуйте перед J2 и I2 в вашей формуле сравнения поставить "--", т.е.
=если(--J2>--I2;"правда";"ложь!")
okshef, правильно ли я понимаю, что:
Это тоже попытка перевода в число.
И автору достаточно будет «--» только перед «I2»?
1. Да
2. Я поправил пост
Возможно (не на чем сейчас проверить) достаточно даже J2-I2>0
okshef, спасибо, ясно. Значит, итоговый вывод таков: необходимо и достаточно любым возможным способом привести текстовое значение к числу.
Возможно (не на чем сейчас проверить) достаточно даже J2-I2>0 »
Да, достаточно. Я проверил.
ДмитрийБел
13-04-2015, 18:34
Спасибо большое!!!
Можно использовать одно на выбор из двух вариантов?
=ЕСЛИ(--J2>--I2;"правда";"ложь")
или
=ЕСЛИ(J2-I2>0;"правда";"ложь")
Последнее выражение не понятно, но главное работает!
Может ещё подскажете два вопроса:
1) можно ли вместо "ложь", чтобы ячейка закрашивалась в красный цвет, к примеру? Нашел формулу для определения цвета заливки ячейки, а на заливку нет.
2) можно ли через "ЕСЛИ" сравнивать два значения в одной ячейке т.е. J2>I2 и J2>H2 - если сохраняются два условия сразу, то "правда"?
Последнее выражение не понятно, но главное работает! »
Любое. И там, и там происходит то же самое, что я описал выше, но только на уровне формулы, а не исходной ячейки.
В первом случае происходит перевод текстового содержимого ячейки в число посредством двух унарных операций «-» (насколько я это понимаю), причём для обеих целевых ячеек. Во втором случае также происходит неявное преобразование в процессе вычисления разницы между значениями ячеек — как я понимаю, среда производит попытку неявного преобразования значения ячеек из текста в число.
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 отсутствуют?
В Excel из комплекта 2003-го Office'а такого нет. Форматирование — это форматирование, данные — это данные. По новым версиям подскажут знающие коллеги.
А что Вы имели в виду под этим:
Нашел формулу для определения цвета заливки ячейки »
?
ДмитрийБел
14-04-2015, 21:22
В Excel из комплекта 2003-го Office'а такого нет. »
2007 используется, а на скринах тренеровался на другом ПК с 2003.
? »
Функция возвращает код цвета заливки указанной ячейки.
=ЦВЕТЗАЛИВКИ() и в скобках указать необходимую ячейку.
Разобрался я.))) Это надстройка для Excel (VBA-Excel), которая расширяет функции т.е. нужно скачивать и подвязывать к Excel.
Я так примерно и понял, что это на самом деле внешняя функция VBA, а не встроенная. Я её видел в результатах поиска то ли на второй, то ли на третьей странице. Ну, и вроде как они там денюжку хотят за эту надстройку, хотя, полагаю, при большом желании можно и самому написать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC