Страница 1 из 1

Даты в Excel

Добавлено: 22 дек 2004, 17:20
Kostik
Есть такая проблема..
В общем вместо того, чтобы в нормальном формате внести в одну базу данных даты их вбили в таком формате (2 варианта - 6 цифр и 8 цифр):

20010306

981028

конечно же работать с датами, которые воспринимаются как число невозможно, поэтому пришлось написать такую формулу
=СЦЕПИТЬ(ПРАВСИМВ(A2;2);"/";ЕСЛИ(ДЛСТР(A2)=8;ПСТР(A2;5;2);ПСТР(A2;3;2));"/";ЕСЛИ(ДЛСТР(A2)=8;ЛЕВСИМВ(A2;4);СЦЕПИТЬ(19;ЛЕВСИМВ(A2;2))))

все, в принципе, нормально, но...

есть пару недостатков:
1. она длинновата..
в связи с этим первый вопрос:
КАК (если это вообще предусмотрено) с помощью формул узнать содержиться ли в ячейке дата или число (не в формате даты)

2. есть ли возможность сделать так, чтобы результаты этой формулы не были текстом (и их не нужно было копировать, вставлять в блокнот или верд, а потом назад в эксель), а сразу становилсь ДАТОЙ?

Спасибо прочитавшим, а тем более ответившим! :)

Добавлено: 22 дек 2004, 18:17
Naeel Maqsudov
2.
=ДАТА(ЕСЛИ(ЦЕЛОЕ(E4/10000)<100;ЦЕЛОЕ(E4/10000)+1900;ЦЕЛОЕ(E4/10000));ЦЕЛОЕ(ОСТАТ(E4;10000)/100);ОСТАТ(E4;100))

(Только тут у меня дата была не в A2 а в Е4)

1.
1. она длинновата..
в связи с этим первый вопрос:
КАК (если это вообще предусмотрено) с помощью формул узнать содержиться ли в ячейке дата или число (не в формате даты)
:) Поздравляю, с помощью ответа на этот вопрос можно удлинить фооррмулу.

Есть функция ЕТЕКСТ, которая равна ИСТИНА если аргумент - текст.
Есть функция ЯЧЕЙКА, которая позволяет получить мамксимум информации о заданной ссылке.

Итак:

=ЕСЛИ(ЯЧЕЙКА("format";E4)="G"; ДАТА(ЕСЛИ(ЦЕЛОЕ(E4/10000)<100;ЦЕЛОЕ(E4/10000)+1900;ЦЕЛОЕ(E4/10000));ЦЕЛОЕ(ОСТАТ(E4;10000)/100);ОСТАТ(E4;100));E4)

Здесь сокращенный алгоритм проверки, который считает, что если формат ячейки Общий, то надо думамть, что там 8/6-значное число, и надо все пересчитать, а если не Общий, то надо все оставить как есть, так как там наверное уже и без того дата стотит.

Можно еще усложнить, если надо.

PS
Различить число в ячейке или дата кроме как по формату не удастся! На ниском уровне числа от таймстемпов не отличаются.

Добавлено: 23 дек 2004, 17:41
Kostik
как это работает (=ДАТА(ЕСЛИ(ЦЕЛОЕ(E4/10000)<100;ЦЕЛОЕ(...................) не понял, но эта формула работает для дат, записанных и в формате 20010306 и в формате 981028!!!
Круто! Спасибо!!

Добавлено: 23 дек 2004, 17:58
Naeel Maqsudov
ЦЕЛОЕ(E4/10000) отбрасывает последние 4 цифры
Далее проверяется усолвие "<100". меньше, то прибавляется 1900, иначе берется как есть. Полученное таким образом значение берется в качестве первого аргумента функции ДАТА.