Преобразование даты в строку Excel


125

В ячейке на листе Excel у меня есть значение даты, например:

01/01/2010 14:30:00

Я хочу преобразовать эту дату в текст, а также хочу, чтобы текст выглядел точно так же, как Date. Таким образом, значение Date 01/01/2010 14:30:00должно выглядеть так, 01/01/2010 14:30:00но внутри должно быть Text.

Как это сделать в Excel?


6
Многие снобистские программисты утверждают, что excel - это не среда программирования, поэтому закрывайте этот вопрос. Я надеюсь, что нет, но просто чтобы предупредить вас.
Ник Фортескью,

4
Excel может не быть полноценной IDE, но если вам предоставлены данные в Excel и вам нужны результаты в Excel, некоторое программирование на VBA имеет смысл.
brichins 03

Ответы:


241
=TEXT(A1,"DD/MM/YYYY hh:mm:ss")

(24 часа в сутки)

=TEXT(A1,"DD/MM/YYYY hh:mm:ss AM/PM")

(обычное время)


3
Полная ссылка на функцию ТЕКСТ, особенно для того, чтобы узнать, как устанавливать форматы: см. Руководство по форматам даты и времени на этой странице office.microsoft.com/en-us/excel-help/…
codea

Когда я пытаюсь выполнить это преобразование, появляется "#AD?" текст, и он говорит, что что-то не так.
AloneInTheDark

1
@AloneInTheDark Когда вы переходите по ссылке из codea, форматы работают, но только если у вас ОС Windows, которая использует английские форматы. В моем случае используются голландские форматы, что означает, например, что «ДД / ММ / ГГГГ чч: мм: сс» становится «ДД / ММ / JJJJ uu: mm: ss», потому что на голландском языке «год» означает «jaar» и «час». это «uur», то есть другие начальные буквы (в то время как «день», «месяц», «минуты» и «секунды» начинаются с одних и тех же букв как на голландском, так и на английском языке). В основном переводите начальные буквы форматов на язык вашей ОС.
Сем Ванминен

3
И обратное преобразование выполнено с помощьюDATEVALUE("01/01/2010")
Zenadix

Как можно использовать формат, который я уже использую для отображения даты, без его указания?
palswim

8

Вот подход VBA:

Sub change()
    toText Sheets(1).Range("A1:F20")
End Sub

Sub toText(target As Range)
Dim cell As Range
    For Each cell In target
        cell.Value = cell.Text
        cell.NumberFormat = "@"
    Next cell
End Sub

Если вы ищете решение без программирования, вопрос следует переместить в SuperUser.


6

Вот еще вариант. Используйте встроенный в Excel мастер «Преобразование текста в столбцы». Он находится на вкладке «Данные» в Excel 2007.

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


4

В некоторых контекстах предварительное использование символа 'будет работать, но если вы сохраните в CSV и загрузите снова, это будет невозможно.

'01/01/2010 14:30:00

4

Не удалось заставить работать формулу TEXT ()

Самым простым решением было скопировать вставку в Блокнот и обратно в Excel со столбцом, установленным на Текст, перед вставкой обратно.

Или вы можете сделать то же самое с такой формулой

=DAY(A2)&"/"&MONTH(A2)&"/"&YEAR(A2)& " "&HOUR(B2)&":"&MINUTE(B2)&":"&SECOND(B2)


1
Проголосовали, потому что, насколько я понимаю, это единственный рабочий метод, не зависящий от языковых настроек. Если вы собираетесь поделиться своей работой, использование TEXT () доставит вам неприятности. Даже в пределах одной страны (например, Германии) вы найдете людей с немецкой и английской конфигурациями.
Доктор В.

1
большое спасибо и за! Это работает для меня, потому что я не могу использовать = TEXT (формулы библиотеки python)
lestat_kim

1

Если вы не используете программирование, выполните следующие действия (1) выберите столбец (2) щелкните правой кнопкой мыши и выберите Формат ячеек (3) Выберите «Пользовательский» (4) В разделе «Тип:» введите дд / мм / гггг чч: мм : сс


0

В Excel 2010 ответ marg работал только с некоторыми данными, которые были у меня в электронной таблице (они были импортированы). Следующее решение работало со всеми данными.

Sub change()
    toText Selection
End Sub

Sub toText(target As range)
Dim cell As range
Dim txt As String
    For Each cell In target
        txt = cell.text
        cell.NumberFormat = "@"
        cell.Value2 = txt
    Next cell
End Sub

0

Я не знаю, когда был опубликован вопрос; теперь он может быть старым. Итак, я ожидаю, что мой ответ будет скорее справочником для будущих подобных вопросов после моего сообщения.

Я не знаю, дал ли кто-нибудь уже ответ, подобный тому, который я собираюсь дать, что может привести, как я думаю, к самому простому, прямому и наиболее эффективному: если кто-то уже дал его, я прошу прощения , но я этого не видел. Здесь мой ответ с использованием CStr вместо ТЕКСТА:

Предполагаемая ячейка A1 содержит дату и использует код VBA:

Dim strDate As String

'Convert to string the value contained in A1 (a date)
strDate = CStr([A1].Value)

После этого вы можете управлять ею как любой обычной строкой, используя строковые функции (MID, LEFT, RIGHT, LEN, CONCATENATE (&) и т. Д.)


-1

Выбранный ответ не сработал для меня, поскольку Excel все еще не преобразовывал текст на текущий момент. Вот мое решение.

Предположим, что в первом столбце A у вас есть данные этого типа, 2016/03/25 21:20:00но они хранятся в виде текста. Затем в столбце B напишите, =DATEVALUE(A1)а в столбце C напишите =TIMEVALUE(A1).

Затем в столбце D =B1+C1добавьте числовые форматы даты и времени.

Наконец, скопируйте значения из D в столбец E, щелкнув правой кнопкой мыши в столбце E и выберите Paste Special -> Paste as Values.

Выделите числовые значения в столбце E и измените тип данных на дату - я предпочитаю использовать настраиваемую дату в форме YYYY-MM-DD HH:MM:SS.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.