Заменить точки в датах косыми чертами - PullRequest
0 голосов
/ 04 октября 2019

При анализе данных в Excel есть много дат, которые я помещаю на лист в формате dd.mm.yyyy. Я хочу преобразовать эти даты в формат dd/mm/yyyy.

При выполнении этого вручную (ctrl+f => replace . by /) Excel выдает правильные европейские даты. При использовании макроса Excel дает мне американские даты, когда день равен 12 или меньше, и европейские даты, когда день больше 12.

Используемый макрос - это обычный макрос поиска и замены (он даже был записан вубедитесь, что он делает то же самое, что и при записи макроса). При записи макроса Excel выдает мне европейские даты, а при запуске его сочетает европейские и американские даты):

Range("A1:A7").Select


Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Замена вручную дает мне следующий вывод:

01.08.2019
05.08.2019
15.08.2019
01.09.2019
06.09.2019
10.10.2019
11.10.2019

=> 

01/08/2019
05/08/2019
15/08/2019
01/09/2019
06/09/2019
10/10/2019
11/10/2019

=>С европейского на европейский

Использование точно такого же (записанного или записанного) макроса Excel дает мне следующий вывод

01.08.2019
05.08.2019
15.08.2019
01.09.2019
06.09.2019
10.10.2019
11.10.2019

=> 

08/01/2019
08/05/2019
15/08/2019
09/01/2019
09/06/2019
10/10/2019
10/11/2019

=> Европейский для смешивания американского и европейского

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

Ответы [ 3 ]

2 голосов
/ 04 октября 2019

Решение для Windows: не позволяйте Excel выполнять преобразование, но пусть Windows выполняет преобразование:

  • Перейти к панели управления, региону и языку

  • Нажмите «Дополнительные настройки»

  • Нажмите на вкладку «Дата»

  • Замените формат краткой даты на dd.MM.yyyy

  • Нажмите Apply и нажмите OK

Теперь импортируйте ваши данные. Excel установит для ваших ячеек даты формат «Дата» (если вы посмотрите на формат в ячейках формата, перед форматом будет стоять «*», что означает, что он изменится с настройкой операционной системы). Когда закончите:

  • снова нажмите «Дополнительные настройки» и перейдите на вкладку «Дата»

  • Измените формат краткой даты на дд / мм / гггг

  • Нажмите «Применить» и «ОК», затем снова нажмите «Применить» и «ОК», чтобы закрыть диалоговое окно «Регион и язык»

Готово! (в любом случае, в моем Excel 2003 даты теперь такие, как вы хотите)

0 голосов
/ 04 октября 2019

@ Пол Огилви

Я пробовал это решение раньше, и даты правильно отформатированы в Windows.

Обход от Zac, похоже, мне очень помог. Вот что я сделал из этого в моем тестовом файле:

Sub Test()
Dim i As Long
Dim sMyDate As String, sMyDate2 As Date
For i = 1 To 10
    sMyDate = Sheet1.Range("A" & i).Value
    sMyDate2 = DateValue(Replace(sMyDate, ".", "/"))
    Sheet1.Range("B" & i).Value = sMyDate2
Next
End Sub

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

0 голосов
/ 04 октября 2019

Хорошая идея установить локальные настройки в Windows @PaulOgilvie. Если вы хотите использовать макрос, вы можете использовать следующее:

enter image description here

Sub ChangeDateFormat()

Dim rng As Range, lr As Long
With Sheet1 'Change to your referenced sheet's CodeName
    lr = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:A" & lr)
    rng.TextToColumns Destination:=rng, DataType:=xlFixedWidth, FieldInfo:=Array(0, xlDMYFormat)
    rng.NumberFormatLocal = "dd/mm/yyyy" 'Change the format to how you would actually manually put it for your local e.g. "dd/mm/jjjj"
End With

End Sub

enter image description here


Примечание: Я нахожусь на локальных настройках nl_NL, чтобы я мог проверить вышеописанное просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...