Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2011, 21:28   #1
sdwig
 
Регистрация: 08.02.2011
Сообщений: 5
Вопрос Работа с датами

Добрый день.

Столкнулся со следующей проблемой: файл (во вложении) в таком виде выгружается из программы. И всё бы ничего, но там разные форматы ячеек, и разные форматы дат. И даже это в принципе было бы не проблемой, но форматы неправильные - стоит ДД.ММ.ГГГГ а на самом деле дата должна читаться ММ.ДД.ГГГГ.
Изменение формата ничего не даёт, так как Excel неправильно понимает дату и просто меняет местами число и месяц (а дату так же воспринимает неверно, т.е. число принимает за номер месяца, а номер месяца за число)

Если честно я в тупике
Единственное, что приходит мне в голову это разбить каждую ячейку со значением на шесть разных:
число
месяц
год
часов
минут
секунд

Только я не знаю как это осуществить. Подскажите формулу или макрос для подобного разделения ячеек.
Ну или может кто-нибудь подскажет более тривиальное решение.

date_issue1.rar

Последний раз редактировалось sdwig; 08.02.2011 в 23:27.
sdwig вне форума Ответить с цитированием
Старый 08.02.2011, 22:11   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
Вложения
Тип файла: rar Книга566.rar (8.0 Кб, 23 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.02.2011, 22:30   #3
sdwig
 
Регистрация: 08.02.2011
Сообщений: 5
По умолчанию

Если честно пока не разобрался в формуле (так как не знаю назначение некоторых формул вложенных в если), но могу сразу сказать, что ячейки, где стоял формат "общий" преобразовались правильно (они были с АМ\РМ на конце), а вот ячейки с форматом ДД.ММ.ГГГГ преобразовались неправильно - вместо номера месяца получилась дата, а вместо даты - номер месяца. Собственно, это то во что я упёрся при своих собственных манипуляциях. Т.е. Excel изначально дату воспринимает неправильно

Update: понял, вы их не преобразовывали, а просто подставили старое значение, преобразовав ячейки с АМ\PM. А их тоже надо преобразовывать, но я думаю теперь на основе Вашей формулы уже разберусь.

Последний раз редактировалось sdwig; 08.02.2011 в 22:35.
sdwig вне форума Ответить с цитированием
Старый 08.02.2011, 22:36   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

позвольте полюбопытствовать, какая конкретно дата, в какой строке распозналась не правильно?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.02.2011, 22:42   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

понял чего надо)) я человек военный, поэтому говорить мне надо все медленно и два раза.
запишите это:
Код:
=ЕСЛИ(ДЛСТР(ПОДСТАВИТЬ(C2;"/";""))=ДЛСТР(C2);ДАТА(ГОД(C2);ДЕНЬ(C2);МЕСЯЦ(C2))+C2-ЦЕЛОЕ(C2);ДАТА(ЗНАЧЕН(ПСТР(C2;ПОИСК(" ";C2)-4;4));ЗНАЧЕН(ЛЕВСИМВ(C2;ПОИСК("/";C2)-1));ЗНАЧЕН(ПСТР(C2;ПОИСК("/";C2)+1;2))) + ВРЕМЗНАЧ(ПРАВСИМВ(C2;ДЛСТР(C2)-ПОИСК(" ";C2))))
в D2. потом копируйте вниз по столбцу.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.02.2011, 22:43   #6
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Function datDD(d As String)
If InStr(1, d, "/") > 0 Then
datDD = Format(d, "c")
Else
m = Mid(d, 1, 2)
dd = Mid(d, 4, 2)
s = Mid(d, 6)
datDD = Format(dd & "." & m & s, "c")

End If
End Function
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 08.02.2011 в 22:54. Причина: исправил
R Dmitry вне форума Ответить с цитированием
Старый 08.02.2011, 22:53   #7
sdwig
 
Регистрация: 08.02.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
понял чего надо)) я человек военный, поэтому говорить мне надо все медленно и два раза.
запишите это:
Код:
=ЕСЛИ(ДЛСТР(ПОДСТАВИТЬ(C2;"/";""))=ДЛСТР(C2);ДАТА(ГОД(C2);ДЕНЬ(C2);МЕСЯЦ(C2))+C2-ЦЕЛОЕ(C2);ДАТА(ЗНАЧЕН(ПСТР(C2;ПОИСК(" ";C2)-4;4));ЗНАЧЕН(ЛЕВСИМВ(C2;ПОИСК("/";C2)-1));ЗНАЧЕН(ПСТР(C2;ПОИСК("/";C2)+1;2))) + ВРЕМЗНАЧ(ПРАВСИМВ(C2;ДЛСТР(C2)-ПОИСК(" ";C2))))
в D2. потом копируйте вниз по столбцу.

Спасибо, помогло
Не думал, что в одну формулу всё удастся уместить, теперь буду изучать чего там нагорожено
sdwig вне форума Ответить с цитированием
Старый 08.02.2011, 22:57   #8
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию файл

смотрите , макросы должны быть включены
Вложения
Тип файла: zip Book2.zip (12.7 Кб, 21 просмотров)
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 08.02.2011, 23:36   #9
sdwig
 
Регистрация: 08.02.2011
Сообщений: 5
Хорошо

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
смотрите , макросы должны быть включены
Спасибо, с макросом тоже работает, жаль я в них не очень много понимаю. Но в этом макросе обязательно разберусь.

Решение найдено, тему можно закрывать.

Последний раз редактировалось sdwig; 08.02.2011 в 23:44.
sdwig вне форума Ответить с цитированием
Старый 09.02.2011, 00:44   #10
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
смотрите , макросы должны быть включены
Чет, ты Дим слишком усложнил. Так не проще:
Код:
Public Function mdat(s$) As String
        mdat = IIf(InStr(1, s, "/") = 0, Format(CDate(s), "mm/dd/yyyy hh:mm:ss"), Format(CDate(s), "dd/mm/yyyy hh:mm:ss"))
End Function
?
Изображения
Тип файла: jpg 2011-02-08_234644.jpg (112.7 Кб, 141 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 09.02.2011 в 01:00.
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с датами Наташок Помощь студентам 0 27.01.2011 22:16
РАбота с датами KNatalia Microsoft Office Excel 3 29.09.2009 14:28
работа с датами Screame Microsoft Office Excel 1 11.07.2009 01:18
Работа с датами Ozerich Общие вопросы Delphi 6 07.08.2008 10:03
работа с датами kolduev Помощь студентам 6 27.02.2008 19:54