Изменения Excel даты даты, когда день ниже месяца (например, 2 апреля) на обратную связь (E.G 4 февраля)

StackOverflow https://stackoverflow.com//questions/25077178

  •  02-01-2020
  •  | 
  •  

Вопрос

У меня есть несколько замечательными с Excel и даты. Ситуация выглядит следующим образом: У нас есть ежемесячный отчет с рядом вкладок, которые импортирует макрос в центральную электронную таблицу, он имеет около 120 столбцов. После импорта мне нужно добавить некоторые формулы в финальных нескольких столбцах, которые имеют отношение к данным, но не включены в данные, и один из них - номер периода (мы работаем для клиента с годом, начиная с 1 апреля и 13 апреля Периоды в 4 недели в год). Чтобы получить это, у меня есть отдельный лист со всеми датами в столбце A, затем периоды и другие данные в следующих столбцах. Простой vlookup смотрит на дату и возвращает период.

Однако некоторые даты приходят хранятся в виде текста (и поэтому vlookup есть # n / a), простое исправление, вставьте специальное - добавьте пустую ячейку и вуаля. И это работает, если я делаю это вручную. Но это предназначено для выполнения всей работы для пользователя, поэтому я попытался сделать это программически согласно коду ниже:

'Sheets("dates and Periods").Activate
'Range("P1").Copy
'Sheets("Data").Activate
'Range(Cells(2, 5), Cells(lastrow, 5)).PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
'Range(Cells(2, 5), Cells(lastrow, 5)).NumberFormat = "dd/mm/yyyy"
.

Я получаю пустую ячейку от «Дат и периоды», потому что я знаю, что это определенно будет пустым.

Теперь, когда я запускаю этот код, он работает для большинства значений. Однако для всех дат в столбце E, где день меньше месяца, например, 1 апреля, 4 мая и т. Д., Он переключает день и месяц, и это не форматирует, изменяясь на длинную дату, я вижу, что это изменило данные вокруг.

Есть ли путь вокруг этого? Я искал решение, но все проблемы, которые я мог найти, при поиске связаны с системой даты 1904 года или с форматированием.

Любая помощь будет оценена.

Решение: [Разрыв в частях и положить его обратно]

For Each cell In Range(Cells(2, 5), Cells(lastrow, 5))

cell.Value = Mid(cell, 4, 2) & "/" & Left(cell, 2) & "/" & Right(cell, 4)

Next cell
.

Это было полезно?

Решение

У меня была эта проблема много раз.Ответ обычно специфичен для решения, но вы можете попробовать преобразовывать дату в строку в формате DD-MMM-YYYY, затем снова обратно.

Другие советы

Когда вы вводите то, что выглядит как дата в ячейке Excel, она будет разбирать его в соответствии с региональными настройками Windows. Строки, которые не подходят, не введены в систему как текст, строки, которые делаются в даты Excel. Этот последний обычно не совпадает с предполагаемой датой.

Я бы предложил исправить это во время процесса импорта. Точно так же зависит от конкретных, которые вы не включали, но процесс состоит в том, чтобы использовать процесс данных / импорт и пройти через мастер импорта текста. Этот мастер позволит вам указать формат для каждого столбца; Включая формат даты для E. Это гарантирует, что все ваши даты должным образом поняты превосходными датами. Таким образом, если формат входящей даты Mdy, вы бы уточняли Mdy; И Excel будет правильно хранить его, а затем отображать его либо в настройке по умолчанию, либо на любой способ отформатирована этот столбец.

Другой вариант, если это возможно, будет изменять генератор отчетов, чтобы он генерирует даты, которые находятся в том же формате, что и формат краткосрочного формата ваших региональных настроек Windows

Я импортирую большое количество файлов, отправленных мне в базы данных, и это последовательно проблема.Проблема не вызвана неправильными данными, плохим форматированием или любой такой вещью, но просто ошибка в Excel (я полагаю, что Microsoft называет ее функцией), где она пытается понять даты в американском формате и автоматически «исправлять» что-либо вНаходит.Это становится все хуже, потому что если дата не работает в американском формате, она преобразует его в текстовый файл, оставляя вас с некоторыми датами, отформатированными в одностороннем направлении, некоторые другие.

Единственное решение, которое я нашел, - это изменить данные на исходном листе, чтобы Excel не может понять его как дату каким-либо образом, затем импортировать его, затем преобразовать его обратно, огромное phaff.Microsoft Пожалуйста, разбирайтесь в этом, это тратить так много времени на программирование об обработке!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top