Подтвердить что ты не робот

Форматирование даты Excel

У меня есть большой импортированный файл csv, содержащий американские даты в столбце. Я хочу изменить эти даты в формате Великобритании (dd/mm/yyyy) с помощью кода. Проблема заключается в том, что даты в США относятся как к формату "mm/dd/yyyy", так и к "m/dd/yyyy", последний из которых не отвечает ни на один из вариантов "clickable" в excel, включая процедуру "Text to Columns". Есть ли код, который при запуске в соседнем столбце будет выполнять преобразование?

4b9b3361

Ответ 1

Вы также можете легко использовать функцию TEXT() (Примечание: исходные данные должны быть значением даты для Excel)

TEXT(value, format_text)

где value - эталонная ячейка, а format_text - это то, как вы хотите отформатировать текст в вашем случае dd/mm/yyyy.

Предполагая, что:

A1 = 3/17/2013
A2 = 12/27/2013

В B1 и B2 просто введите:

B1 = TEXT(A1, "dd/mm/yyyy")
B2 = TEXT(A2, "dd/mm/yyyy")

и результат должен быть

     A              B
3/17/2013      17/03/2013
12/27/2013     27/12/2013

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

ОБНОВЛЕННОЕ ПРЕДЛОЖЕНИЕ ПРИ РАБОТЕ С ТЕКСТОМ:

Разделите строку, используя функции mid(), left() и right(), затем проверьте, не превышает ли длина месяца 1 или 2 символа с помощью функции LEN(). Наконец, объедините строку вместе с помощью операторов and и /.

Попробуйте вставить это в B1, он должен работать нормально:

=MID(A1,FIND("/",A1,1)+1,2)&"/"&IF(LEN(LEFT(A1,FIND("/",A1)-1))=1,0&LEFT(A1,FIND("/",A1)-1),LEFT(A1,FIND("/",A1)-1))&"/"&RIGHT(A1,4)

Ответ 2

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

Предполагая, что первая строка даты находится в ячейке A1, следующий вызов функции превратит строку в значение даты.

  =DATEVALUE(A1)

Вы можете создать пользовательский формат dd/mm/yyyy;@, щелкнув правой кнопкой мыши на ячейке, выбрав "Формат ячеек", "Номер", "Пользовательский" и введите формат в поле "Тип".

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

Ответ 3

Вот что может вам помочь. Используя метод QueryTables, вы можете указать, что Excel интерпретирует определенные столбцы данных как строку.

Sub ImportExternalCSVAsText()
'
Dim sFileName As String
sFileName = Application.GetOpenFilename("CSV files, *.csv")

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & sFileName _
        , Destination:=Range("$A$1"))
        .Name = "CSV"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

В этом примере я импортировал CSV файл 3 столбца шириной и указывал, что столбцы 2 и 3 содержат данные типа String.

.TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING

Если этот метод не работает, сообщите мне. Я должен был решить эту проблему раньше (как подрядчик США для контрактной работы в Великобритании), и я уверен, что у меня есть несколько функций, которые я использовал в то время.

Это приведет все значения в строку.

Вам, скорее всего, придется разбирать их, потому что входы данных в США, такие как "12/30/2011", не смогут выполнить функцию DATEVALUE() в вашей системе Locale, а входы данных в США, такие как "07/05/2012" (5 июля 2012 года) будет интерпретироваться как "7 мая 2012 года" по вашему языку.

Ответ 4

Эта функция должна выполнить трюк:

=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))

Ответ 5

Как ни странно, для этого вам нужно преобразовать один столбец текста в один столбец текста.

Выберите столбец, содержащий ваши даты: mm/dd/yyyy

  • В разделе "Данные" выберите "Текст в столбцы"
  • Выберите фиксированную ширину
  • Далее
  • Установите разделитель ширины столбца после года (гггг)
  • В формате данных столбца
  • Выпадающий выберите mm/dd/yyyy (исходный формат)
  • Выберите пункт назначения
  • Готово

Исходные данные преобразуются в формат даты вашей системы.

Sub USUKDateFormat()

    ' USUKDateFormat Macro

    Selection.TextToColumns Destination:=ActiveCell.Offset(0, 2).Range("A1"), _
        DataType:=xlFixedWidth, OtherChar:="/", FieldInfo:=Array(Array(0, 4), Array _
        (10, 1)) 
End Sub