Невозможно получить Excel, чтобы распознать дату в столбце


45

У меня постоянно возникают проблемы с датами в Excel, я, должно быть, что-то делаю не так, но я не понимаю, что именно.

У меня есть таблица, экспортированная с нашего сервера обмена, которая содержит столбец с датами. Они вышли в американском формате, хотя я в Великобритании.

Рассматриваемая колонка выглядит следующим образом

04/08/2012
04/09/2009
04/01/2010
04/21/2011
04/05/2012
08/30/2009
08/29/2010
08/28/2011

В Excel я выделил столбец и выбрал Format Cells.... В этом диалоговом окне я выбрал Date, выбрал English (United States)в качестве локали и выбрал подходящий формат даты из списка. Я нажимаю ОК и пытаюсь отсортировать данные по этому столбцу.

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

Это в свою очередь сортирует данные даты по первым двум цифрам.

Я знаю, что могу переформатировать эти данные в ISO, и тогда будет работать сортировка от А до Я, но я не должен был это делать, я явно что-то упускаю. Что это такое?

РЕДАКТИРОВАТЬ: Я испортил награду, но это должно было пойти на ответ @ r0berts , его первое предложение текста в столбцы без разделителя и выбрал «MDY» в качестве типа данных работает. Кроме того, если у вас есть время (то есть 04/21/2015 18:34:22), вам нужно сначала избавиться от данных времени. Однако после этого метод, предложенный @ r0berts, работает нормально.


Я подозреваю, что проблема в том, что Excel не знает, как это сделать - вы можете проверить. Когда вы попытаетесь обновить формат дат, выберите столбец, щелкните правой кнопкой мыши по нему и выберите формат ячеек (как вы уже сделали), но выберите опцию 2001-03-14 (в нижней части списка). Я буду подозревать, что корректно обновляются только некоторые форматы даты, что указывает на то, что Excel по-прежнему воспринимает это как строку, а не как дату!
Дейв

Каков формат экспортируемых данных? Это CSV или XLSX?
Excellll

Ответы:


70

Проблема: Excel не хочет распознавать даты как даты, хотя через «Формат ячеек - Число - Пользовательский» вы явно пытаетесь сказать, что это даты через « mm/dd/yyyy». Как Вам известно; Когда Excel распознает что-то как дату, оно сохраняет ее как число - например, " 41004", но отображает как дату в соответствии с указанным форматом. Чтобы добавить к путанице, Excel может конвертировать только часть ваших дат, таких как 08/04/2009, но оставить другие, например, 28/07/2009 без преобразования.

Решение: шаги 1, а затем 2

1) Выберите столбец даты. Под данными выберите кнопку Text to Columns. На первом экране оставьте переключатель на «с разделителями » и нажмите « Далее» . Снимите флажки с любого разделителя ( пустые поля ; флажки не установлены) и нажмите « Далее» . Под форматом данных столбца выберите « Дата», выберите « MDY» в соседнем поле со списком и нажмите « Готово» . Теперь вы получили значения даты (т. Е. Excel распознал ваши значения как Dateтип данных), но форматирование, скорее всего, по-прежнему соответствует дате локали, а не той, которую mm/dd/yyyyвы хотите.

2) Чтобы правильно отобразить желаемый формат даты в США, сначала нужно выбрать столбец (если он не выбран), затем в поле «Формат ячейки - число» выбрать « Дата» и «Язык: английский (США)» . Это даст вам формат как " m/d/yy". Затем вы можете выбрать Custom и там вы можете либо набрать " mm/dd/yyyy", либо выбрать его из списка пользовательских строк.

Альтернатива : используйте LibreOffice Calc. После вставки данных из записи Патрика выберите «Специальная вставка» ( Ctrl+Shift+V) и выберите «Неформатированный текст». Откроется диалоговое окно «Импорт текста». Набор символов остается Unicode, но для языка выберите английский (США); Вам также следует установить флажок «Определять специальные номера». Ваши даты сразу появляются в формате США по умолчанию и сортируются по дате. Если вы хотите использовать специальный формат США MM / DD / YYYY, вам нужно указать это один раз через «формат ячеек» - до или после вставки.

Можно сказать, что Excel должен был распознать даты, как только я сказал это через «Формат ячейки», и я не мог согласиться с этим . К сожалению, только через шаг 1 сверху я смог заставить Excel распознавать эти текстовые строки как даты. Очевидно, что если вы делаете это много, это боль в шее, и вы можете составить визуальную основную процедуру, которая сделает это за вас одним нажатием кнопки.

Данные | Текст в столбцы

Обновление ведущего апострофа после вставки: в строке формул видно, что в ячейке, где дата не распознана, есть главный апостроф. Это означает, что в ячейке, отформатированной как число (или дата), есть текстовая строка. Можно сказать, что ведущий апостроф мешает электронной таблице распознать число. Вы должны знать, чтобы искать это в строке формул - потому что электронная таблица просто отображает то, что выглядит как выравнивание по левому краю. Для решения этой проблемы выберите столбец, который вы хотите исправить, выберите в менюData | Text to Columnsи нажмите ОК. Иногда вы сможете указать тип данных, но если вы ранее установили формат столбца в соответствии с вашим конкретным типом данных - он вам не понадобится. Команда на самом деле предназначена для разделения текстового столбца на два или более с использованием разделителя, но она также работает как обаяние для этой проблемы. Я протестировал его в Libreoffice , но в Excel тоже есть такой же пункт меню .


Я обращаюсь к обеим вашим точкам в моем ОП. Разбиение значений даты на столбцы (а затем повторная интеграция в формате ISO), конечно, возможно, но, учитывая, что в Excel имеются обширные встроенные функции дат, я бы хотел использовать их с имеющимися у меня данными о дате. Ваш второй вариант именно так, как я описываю, что не работает для меня.
Патрик

Уважаемый Патрик, пожалуйста, прочитайте внимательно. Или вы можете использовать Libre Office Calc - с вашими данными это работает сразу - вы просто предварительно отформатируете столбец для даты - английский (США) и после вставки сделайте «Специальная вставка» «Неформатированный текст» - просто сообщите диалоговому окну, что язык Английский (США) и не забудьте поставить галочку для распознавания специальных номеров. В своем ответе я старался изо всех сил намекнуть, что Excel несовместим с этим (глючит), и вам придется прибегнуть к этим шагам 1, а затем 2, чтобы достичь желаемого результата.
r0berts

Я действительно должен был правильно прочитать ваш вопрос. Ваше первое предложение действительно работает. Вы должны были получить награду. Спасибо за вашу помощь.
Патрик

Предложение 1 работает как шарм. Спасибо.
Адам

Действительно хороший ответ !!!
Adders

8

Выделите все столбцы и перейдите в Locate and Replace и просто замените "/"на /.


Можете ли вы объяснить, что это делает, чтобы решить проблему?
fixer1234

Это действительно сработало и было легко. Замена вещь просто удалить ведущие нули
ПедроГабриэль

2
Во-первых, ЭТО РАБОТАЕТ. Лучшее решение. Гораздо лучше, чем проверенное решение :). Для fixer1234 и @PedroGabriel: дело не в том, что он удаляет нули. В процессе замены содержимого ячейки Excel оценивает, содержит ли результирующая ячейка формулу, текст или число. После выполнения замены "/" в ячейке теперь указывается число (которое технически является датой для Excel), поэтому теперь она корректно сортируется. (Умные пользователи могут распознать технику выполнения поиска / замены с помощью символа «=» в аналогичном сценарии, в котором Excel переосмысливает содержимое.) В любом случае, у Jair есть идеальное решение :)
MicrosoftShouldBeKickedInNuts

@MicrosoftShouldBeKickedInNuts сегодня я понятия не имею, почему я сказал, что по поводу нулей, это действительно не имеет ничего общего с нулями ... Это лучший ответ, все еще используя этот. Ура
ПедроГабриэль

3

У меня была точно такая же проблема с датами в Excel. Формат соответствует требованиям для даты в Excel, но без редактирования каждой ячейки он не распознает дату, а когда вы работаете с тысячами строк, редактировать каждую ячейку вручную нецелесообразно. Решение состоит в том, чтобы найти и заменить строку дат, где я заменил дефис дефисом. Excel проходит через столбец, заменяя «like» на «like», но в результате получается, что теперь он пересчитывает даты! ИСПРАВЛЕНО!


3

Я имел дело с аналогичной проблемой, связанной с тысячами строк, извлеченных из базы данных SAP, и, необъяснимым образом, двумя разными форматами даты в одном и том же столбце даты (большинство из них - наш стандартный «ГГГГ-ММ-ДД», но около 10% - «ММ DD-YYY "). Редактировать 650 строк один раз в месяц вручную было невозможно.

Ни один (ноль ... 0 ... ноль) из указанных выше вариантов не сработал. Да, я попробовал их все. Копирование в текстовый файл или явный экспорт в txt все же каким-то образом никак не повлияло на формат (или его отсутствие) 10-процентных дат, которые просто сидели в своем углу, отказываясь вести себя.

Единственный способ исправить это - вставить пустой столбец справа от неправильного столбца даты и использовать следующую, довольно упрощенную формулу:

(при условии, что ваши данные плохо себя ведут Column D)

=IF(MID(D2,3,1)="-",DATEVALUE(TEXT(CONCATENATE(RIGHT(D2,4),"-",LEFT(D2,5)),"YYYY-MM-DD")),DATEVALUE(TEXT(D2,"YYYY-MM-DD")))

Затем я мог бы скопировать результаты в моем новом вычисляемом столбце поверх дат неправильного поведения, вставив только «Значения», после чего я мог удалить вычисленный столбец.


3

Это может не относиться к первоначальному спрашивающему, но может помочь кому-то еще, кто не может отсортировать столбец дат.

Я обнаружил, что Excel не будет распознавать столбец дат, которые были все до 1900 года, настаивая на том, что они были столбцом текста (поскольку 01.01.1900 имеет числовой эквивалент 1, а отрицательные числа, по-видимому, недопустимы). Поэтому я сделал общую замену всех моих дат (которые были в 1800-х годах), чтобы поместить их в 1900-е годы, например 180 -> 190, 181 -> 191 и т. Д. Процесс сортировки тогда работал нормально. Наконец я сделал замену другим способом, например 190 -> 180.

Надеюсь, это поможет другому историку.


2

Похоже, что Excel не распознает ваши даты как даты, он распознает их текст, поэтому вы можете выбрать параметры сортировки от А до Я. Если вы сделаете это правильно, вы должны получить что-то вроде этого:

http://i.stack.imgur.com/Qb4Pj.png

Следовательно, важно убедиться, что Excel распознает дату. Самый простой способ сделать это - использовать ярлык CTRL+SHIFT+3.

Вот что я сделал с твоими данными. Я просто скопировал его из вашего поста выше и вставил в Excel. Затем я применил ярлык выше, и я получил необходимую опцию сортировки. Проверьте изображение.

http://i.stack.imgur.com/yAa6a.png


2
К сожалению, этот ярлык не работает для меня.
Патрик

Что делает ярлык в вашей системе, Патрик.
Firee

3
Ярлык, похоже, ничего не делает. В моем распоряжении несколько систем, работающих под управлением Office 2007, 2010 и 2013, и ни одна из них не реагирует на ярлык CTRL SHIFT 3. CTRL 1 правильно отображает диалоговое окно «форматировать ячейку».
Патрик

Ctrl + Shift + 3 клавиш, ссылки несколько неряшливо , как «Ctrl + Shift + #» здесь , означает «Применяет формат даты с днем, месяц и год.» В Excel 2007, 2010, 2013 и 2016. ( В частности в моем Excel 2013 это «d-mmm-yy».) Документ Microsoft не объясняет, что ячейки должны уже содержать… (продолжение)
Скотт

(Продолжение) ... значения, Excel распознает как данные даты / времени, и это , кажется , как никто здесь четко объяснил , что, так как Патрик находится в Англии, его версия Excel является признание строки , как 04/08/2012, 04/09/2009и 04/01/2010в 4-августа-2012 , 4 сентября 2009 года и 4 января 2010 года, соответственно, и рассматривается 04/21/2011как текстовая строка (потому что нет 21-го месяца). Поскольку некоторые из значений являются текстовыми (а некоторые из значений, предположительно, фактически были неправильно истолкованы), форматирование (например, с помощью сочетания клавиш Ctrl + Shift + 3) не принесет никакой пользы.
Скотт

2

Я подозреваю, что проблема в том, что Excel не может понять формат ... Хотя вы выбираете формат даты, он остается в виде текста.

Вы можете легко проверить это: когда вы пытаетесь обновить формат дат, выберите столбец, щелкните по нему правой кнопкой мыши и выберите формат ячеек (как вы уже это сделали), но выберите опцию 2001-03-14 (в нижней части списка). Затем просмотрите формат ваших ячеек.

Я буду подозревать, что только некоторые из форматов даты обновляются правильно, что указывает на то, что Excel по-прежнему воспринимает это как строку, а не как дату (обратите внимание на различные форматы на снимке экрана ниже)!

введите описание изображения здесь

Для этого есть обходные пути, но ни один из них не будет автоматизирован просто потому, что вы экспортируете каждый раз. Я бы предложил использовать VBa, где вы можете просто запустить макрос, который конвертирует из формата даты США в Великобританию, но это будет означать копирование и вставку VBa в ваш лист каждый раз.

Кроме того, вы создаете Excel, который читает вновь созданные экспортированные листы Excel (из обмена), а затем выполняете VBa, чтобы обновить формат даты для вас. Я предполагаю, что файл Exported Exchange Excel всегда будет иметь одинаковое имя файла / каталог и приведу рабочий пример:

Итак, создайте новый лист Excel с именем ImportedData.xlsm (Excel включен). Это файл, в который мы будем импортировать экспортированный файл Exchange Excel!

Добавьте этот VBa в файл ImportedData.xlsm

Sub DoTheCopyBit()

Dim dateCol As String
dateCol = "A"        'UPDATE ME TO THE COLUMN OF THE DATE COLUMN

Dim directory As String, fileName As String, sheet As Worksheet, total As Integer

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = "C:\Users\Dave\Desktop\"                   'UPDATE ME
fileName = Dir(directory & "ExportedExcel.xlsx")       'UPDATE ME (this is the Exchange exported file location)

Do While fileName <> ""

'MAKE SURE THE EXPORTED FILE IS OPEN
Workbooks.Open (directory & fileName)

Workbooks(fileName).Worksheets("Sheet1").Copy _

Workbooks(fileName).Close

fileName = Dir()

Loop

Application.ScreenUpdating = True
Application.DisplayAlerts = True

Dim row As Integer
row = 1
Dim i As Integer
Do While (Range(dateCol & row).Value <> "")

     Dim splitty() As String
     splitty = Split(Range(dateCol & row).Value, "/")
     Range(dateCol & row).NumberFormat = "@"
     Range(dateCol & row).Value = splitty(2) + "/" + splitty(0) + "/" + splitty(1)
     Range(dateCol & row).NumberFormat = "yyyy-mm-dd"
     row = row + 1
Loop


End Sub

Я также обновил формат даты до yyyy-mm-dd, потому что таким образом, даже если Excel дает вам фильтр сортировки AZ вместо новейших значений, он все равно работает!

Я уверен, что в приведенном выше коде есть ошибки, но я, очевидно, понятия не имею, какой тип данных у вас есть, но я протестировал его с одним столбцом дат (как у вас), и он отлично работает для меня!

Как добавить VBA в MS Office?


хорошо ... Я собираюсь оставить это на пару дней, чтобы дать ему немного дополнительной информации, но это выглядит как солидный ответ. Хотя это абсолютно безумие, я не могу поверить, что это необходимо. Поскольку я исправил данные в источнике с помощью небольшой функции в powershell, чтобы перевернуть их в формат ISO, в этот момент мне все равно, если Excel распознает их как дату: /
Патрик


1

Я понял!

В начале и в конце даты есть пробел.

  1. Если вы используете найти и заменить и нажмите пробел, он не будет работать.
  2. Вы должны нажать прямо перед номером месяца, нажать клавишу Shift и стрелку влево, чтобы выбрать и скопировать. Иногда вам нужно использовать мышь, чтобы выбрать место.
  3. Затем вставьте это как пробел в поиске и замене, и все ваши даты станут датами.
  4. Если есть место и дата Выберите «Данные»> «Перейти к данным»> «Текст в столбцы»> «Разграничить»> «Пробел в качестве разделителя», а затем завершите ».
  5. Все пробелы будут удалены.

Причина, по которой поиск и замена не будут работать с пробелом, заключается в том, что пробел, скорее всего, является вкладкой.
Патрик

0

Если Excel упрямо отказывается признать вашу колонку датой, замените ее другой:

  • Добавить новый столбец справа от старого столбца
  • Щелкните правой кнопкой мыши новый столбец и выберите Format
  • Установите формат date
  • Выделите весь старый столбец и скопируйте его
  • Выделите верхнюю ячейку нового столбца и выберите Paste Specialи вставьте толькоvalues
  • Теперь вы можете удалить старый столбец.

Я пробовал это, он ведет себя так же с новым столбцом. Посмотрите ответ Дэйва, экранная шапка вверху - это то, что я получаю, независимо от того, сколько раз я перемещаю его между столбцами.
Патрик

Попробуйте форсировать проблему, используя функцию DATEVALUE (старый столбец) в формуле для нового столбца, затем используйте раскрывающийся список Форматирование чисел на панели ленты Home, чтобы выбрать «Короткая / длинная дата».
Harrymc

0

Я просто скопировал число 1 (один) и умножил его на столбец даты (данные), используя функцию PASTE SPECIAL. Затем он изменяется на Общее форматирование, т. Е. 42102. Затем примените дату к форматированию, и теперь он распознает его как дату.

Надеюсь это поможет


0

Все вышеперечисленные решения, включая r0berts, оказались безуспешными, но нашли это причудливое решение, которое оказалось самым быстрым решением.

Я пытался отсортировать «даты» в загруженной таблице транзакций по счетам.

Это было загружено через браузер CHROME. Никакое количество манипуляций с «датами» не сделало бы их признанными сортируемыми от старого к новому.

Но затем я загрузил через браузер INTERNET EXPLORER - удивительно - я мог сортировать мгновенно, не касаясь колонки.

Я не могу объяснить, почему разные браузеры влияют на форматирование данных, за исключением того, что это явно было и было очень быстрым решением.


0

Мое решение в Великобритании - у меня были мои даты с точками в них как это:

03.01.17

Я решил это с помощью следующего:

  1. Выделите весь столбец.
  2. Перейти, чтобы найти и выбрать / заменить.
  3. Я заменил все полные остановки со средней чертой, например, 03.01.17, 03-01-17.
  4. Держите столбец выделенным.
  5. Формат ячеек, номер на вкладке выбора даты.
  6. Используйте Тип 14-03-12(важно, чтобы у меня была средняя черта)
  7. Английский язык (Великобритания)

При сортировке столбца сортируются все даты за год.


0

Я попробовал различные предложения, но нашел, что самое простое решение для меня было следующим ...

См. Рисунки 1 и 2 для примера ... (обратите внимание - некоторые поля были скрыты намеренно, поскольку они не влияют на пример). Надеюсь, это поможет...

  1. Поле C - смешанный формат, который сводил меня с ума абсолютно. Так данные поступали напрямую из базы данных и не имели лишних пробелов или сумасшедших символов. Например, при отображении его в виде текста 01.01.2016 отображалось значение типа «42504», смешанное с 15.04.2006, которое показывалось как есть.

  2. Поле F - где я получил длину поля C (формула LEN будет длиной 5 из 10 в зависимости от формата даты). Поле общего формата для простоты.

  3. Поле G - получение компонента месяца смешанной даты - на основе результата длины в поле F (5 или 10) я либо получаю месяц из значения даты в поле C, либо получаю символы месяца в строке.

  4. Поле H - получение компонента дня смешанной даты - на основе результата длины в поле F (5 или 10) я либо получаю день из значения даты в поле C, либо получаю символы дня в строке.

Я могу сделать это в течение года, а затем создать дату из трех компонентов, которая является последовательной. В противном случае я могу использовать отдельные значения дня, месяца и года в своем анализе.

Рисунок 1: основная электронная таблица со значениями и именами полей

Изображение 2: электронная таблица, показывающая формулы, соответствующие приведенному выше объяснению

Надеюсь, это поможет.


(1) Хотя было бы неплохо опубликовать изображение на экране, чтобы продемонстрировать, что ваш ответ действительно работает, мы предпочитаем, чтобы формулы в вашем решении были размещены в виде текста в теле вашего ответа, чтобы люди могли копировать и вставлять их. (2) Кажется, вы понимаете проблему - числовые даты, такие как, 04/08являются неоднозначными. 04/08будет интерпретироваться как 8 апреля в некоторых регионах (например, в США) и 4 августа в других (например, в Англии). Но они неоднозначны именно потому, что номер месяца и день месяца разные. … (Продолжение)
Скотт

(Продолжение) ... Так почему бы вам использовать ип  неоднозначные даты , как 01/01в ответе? (3) На самом деле, я не уверен, что вы понимаете проблему или что ваш ответ действительно работает, поскольку на вашем листе есть строки, где номер месяца равен 15; это кажется очевидной ошибкой. И, учитывая, что 04/15это однозначно - это должно означать 15 апреля - не имеет смысла, что ваш метод анализируется 01/11как 1-й день 11-го месяца. … (Продолжение)
Скотт

(Продолжение)… (4) Следует отметить, что в лучшем случае ваш ответ будет обрабатывать только даты, которые выглядят как nn / nn / nnnn . Он потерпит неудачу на даты , как 5/8, 5/08, 5/28, 05/8и 11/8. Кроме того - забавный факт - ваш ответ потерпит неудачу в даты ≤ 17 мая 1927 года и ≥ 17 октября 2173 года. Не берите в голову проблему Y10K; у нас могут начаться проблемы уже через 154 года! (5) Вы говорите: «Я могу сделать это и в течение года, а затем создать дату из трех последовательных компонентов». Так почему бы и нет, и показать это? … (Продолжение)
Скотт

(Продолжение) ... Особенно трудно проверить, работает ли ваш метод, когда вы представляете его неполную версию; тот, который не показывает месяц, день и год, собираемый в дату. (6) Как я сказал Patsaeed , было бы неплохо, если бы вы использовали данные ОП из этого вопроса, а не составляли свои собственные. Если не использовать данные ОП, было бы неплохо, если бы вы использовали данные Patsaeed, поэтому, по крайней мере, мы сможем сравнить яблоки с яблоками. … (Продолжение)
Скотт

(Продолжение)… И независимо от того, используете ли вы данные ОП или чьи-то еще, было бы неплохо, если бы вы показали исходные данные для своего сценария. (Например, для строки 7, это 01/11/2016или нет  11/01/2016?) И, если вы собираетесь использовать свои собственные данные, было бы неплохо, если бы вы включили даты того же месяца, которые демонстрируют (например), как 1/11и 1/21обрабатываются по-другому. И зачем дублировать данные? Вы потратили 19 строк, используя одни и те же четыре значения несколько раз, распределенные по 23 строкам.
Скотт

0

Совместное использование небольшого, но гораздо более простого решения на тему ..... Нет необходимости запускать макросы или что-то увлекательное .... простые формулы MS Excel и редактирование.

смешанный снимок Excel Excel:

введите описание изображения здесь

  • Дата в смешанном формате.
  • Поэтому, чтобы создать симметричный формат даты, были созданы дополнительные столбцы, преобразующие этот столбец даты «смешанного формата» в TEXT.
  • Из этого текста мы определили позиции "/", и был извлечен средний текст, определяющий дату, месяц и год по формуле MID.
  • Те, которые изначально были датами, в формуле заканчивались ошибкой / #VALUEрезультатом. - Наконец, из строки, которую мы создали - мы преобразовали их в даты по формуле DATE.
  • #VALUE были выбраны как IFERROR добавлен в формулу DATE и столбец был отформатирован как требуется (здесь, дд / ммм / гг)

* ОБРАТИТЕСЬ К ОБЗОРУ ЛИСТА EXCEL ВЫШЕ (= смешанный снимок Excel Excel) *


(1) Хотя было бы неплохо опубликовать изображение на экране, чтобы продемонстрировать, что ваш ответ действительно работает, мы предпочитаем, чтобы формулы в вашем решении были размещены в виде текста в теле вашего ответа, чтобы люди могли копировать и вставлять их. (2) Ваши формулы , как показано в изображении неверны, поскольку они относятся к столбцам  V, Wи  Xкогда они должны иметь в виду Колонный  B, Cи D . … (Продолжение)
Скотт

(Продолжение)… (3) Было бы неплохо, если бы вы использовали данные ОП, исходя из вопроса, а не составляли свои собственные. И независимо от того, используете ли вы данные ОП или свои собственные, было бы неплохо, если бы вы показали исходные данные для своего сценария (например, для строки 9 это5/8/2014 или  5/08/2014). И, если вы собираетесь использовать свои собственные данные, было бы неплохо, если бы вы включили даты того же месяца, чтобы продемонстрировать (например), как 5/8и 5/28как обрабатываются по-разному. И зачем дублировать данные? Вы потратили шесть строк, используя одни и те же значения более одного раза.
Скотт

0

Это происходит постоянно при обмене данными о дате между локалями в Excel. Если у вас есть контроль над программой VBA, которая экспортирует данные, я предлагаю экспортировать число, представляющее дату, а не саму дату. Число однозначно соотносится с одной датой, независимо от форматирования и локали. Например, вместо файла CSV, отображающего 24/09/2010, будет отображаться 40445.

В цикле экспорта, когда вы удерживаете каждую ячейку, если это дата, конвертируйте ее в число с помощью CLng (myDateValue). Это пример того, как мой цикл проходит по всем строкам таблицы и экспортируется в CSV (обратите внимание, я также заменяю запятые в строках тегом, который я удаляю при импорте, но вам это может не понадобиться):

arr = Worksheets(strSheetName).Range(strTableName & "[#Data]").Value

    For i = LBound(arr, 1) To UBound(arr, 1)
        strLine = ""
        For j = LBound(arr, 2) To UBound(arr, 2) - 1
            varCurrentValue = arr(i, j)
            If VarType(varCurrentValue) = vbString Then
                varCurrentValue = Replace(varCurrentValue, ",", "<comma>")
            End If
            If VarType(varCurrentValue) = vbDate Then
                varCurrentValue = CLng(varCurrentValue)
            End If
            strLine = strLine & varCurrentValue & ","
        Next j
        'Last column - not adding comma
        varCurrentValue = arr(i, j)
            If VarType(varCurrentValue) = vbString Then
                varCurrentValue = Replace(varCurrentValue, ",", "<comma>")
            End If
            If VarType(varCurrentValue) = vbDate Then
                varCurrentValue = CLng(varCurrentValue)
            End If
        strLine = strLine & varCurrentValue

        strLine = Replace(strLine, vbCrLf, "<vbCrLf>") 'replace all vbCrLf with tag - to avoid new line in output file
        strLine = Replace(strLine, vbLf, "<vbLf>") 'replace all vbLf with tag - to avoid new line in output file
        Print #intFileHandle, strLine
    Next i

0

Мне не повезло со всеми вышеперечисленными предложениями - я пришел к очень простому решению, которое работает как шарм. Вставьте данные в Google Sheets, выделите столбец даты, нажмите на формат, затем число и номер еще раз, чтобы изменить их на числовой формат. Затем я копирую и вставляю данные в электронную таблицу Excel, нажимаю на даты и форматирую ячейки до даты. Очень быстрый. Надеюсь это поможет.


0

Эта проблема сводила меня с ума, и я наткнулся на простое решение. По крайней мере, это сработало для моих данных. Это легко сделать и запомнить. Но я не знаю, почему это работает, но изменение типов, как указано выше, не работает. 1. Выберите столбцы с датами. 2. Найдите год в датах, например, 2015. Выберите Заменить все на тот же год, 2015. 3. Повторите эти действия для каждого года. Это изменяет типы на фактические даты, год за годом.
Это все еще громоздко, если в ваших данных много лет. Быстрее найти и заменить 201 на 201 (заменить 2010 на 2019); заменить 200 на 200 (заменить 2000 на 2009 год); и так далее.


0

Выберите даты и запустите этот код над ним ..

On Error Resume Next
    For Each xcell In Selection            
        xcell.Value = CDate(xcell.Value)     
    Next xcell                              
End Sub

-1

Я использую Mac.

Перейдите в настройки Excel> Изменить> Параметры даты> Автоматически конвертировать систему дат

Также,

Перейдите в Таблицы и фильтры> Группировать даты при фильтрации.

Проблема, вероятно, началась, когда вы получили файл с другой системой дат, и это испортило вашу функцию даты Excel


-2

Я обычно просто создаю дополнительный столбец для сортировки или суммирования, поэтому используйте year(a1)&if len(month(a1))=1,),"")&month(a1)&day(a1).

Это даст yyyymmddрезультат, который можно отсортировать. Использование len(a1)Just позволяет добавить дополнительный ноль в течение месяцев 1-9.


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