Изменения форматирования даты в Excel после использования Find / Replace - PullRequest
0 голосов
/ 27 июня 2018

У меня есть несколько дат в томе, которые представлены в формате Великобритании, но разделены точками, а не косыми чертами.

Каждый раз, когда я запускаю макрос для замены точек на тире и использования строки кода ниже, Excel всегда думает, что месяцы и дни - наоборот

Replace What:=".", Replacement:="/"
NumberFormat = "dd/mm/yyyy"

В качестве примера: 03.07.18 Станет 07/03/2018 несмотря на форматирование как Великобритания.

Как мне сохранить дату как 03/07/2018

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Легче изменить ". " в формате , чем в значении :

enter image description here

код:

Sub formatfixer()
    Dim r As Range, formt As String
    For Each r In Intersect(Selection, ActiveSheet.UsedRange)
        formt = r.NumberFormat
        If InStr(1, formt, ".") > 0 Then
            r.NumberFormat = "dd/mm/yyyy"
        End If
    Next r
End Sub

результат:

enter image description here

0 голосов
/ 27 июня 2018

Вы можете попробовать разбить на DateSerial:

Sub Test()

    Dim r As Range
    Set r = Sheet1.Range("B10")

    r = DateSerial(Split(r, ".")(2), Split(r, ".")(1), Split(r, ".")(0))

    r.NumberFormat = "dd/mm/yyyy"

End Sub

Split возвращает начинающийся с нуля одномерный массив, содержащий указанное количество подстрок. .

Что это означает на простом английском, так это то, что он берет текстовую строку 03.07.18 и разбивает ее на три части, используя ..
Таким образом, вы получите 03, 07 и 18 в массиве.

Это может быть легче читать как:

v = Split(r, ".")
r = DateSerial(v(2), v(1), v(0))

DateSerial принимает три числа (год, месяц и день) и возвращает дату. Три части Сплита передаются в это, чтобы создать дату.

Для обработки на нескольких ячейках используйте:

Sub formatfixer()
    Dim r As Range
    For Each r In Range("H5:H120")
        r = DateSerial(Split(r, ".")(2), Split(r, ".")(1), Split(r, ".")(0))
        r.NumberFormat = "dd/mm/yyyy"
    Next r
End Sub
0 голосов
/ 27 июня 2018

После замены вы можете попытаться очистить формат даты и применить метод NumberFormat:

.Range(yourRange).ClearFormats
.Range(yourRange).NumberFormat = "dd/mm/yyyy"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...