Como analiso um formato de data fora do padrão no Excel?


24

Eu tenho uma coluna de valores de seqüência de caracteres semelhantes à data no formato yyyy-mm-dd, como 2011-Sep-13. Preciso convertê-los em números de série da data do Excel para que eu possa usá-los em fórmulas.

DATEVALUE não consegue reconhecer este formato; Acabei de chegar #VALUE!quando tento. Ele também não assume um formato de data personalizado (diferente da maioria das linguagens de programação).

Como converter formatos de data arbitrários em valores de data do Excel?

Respostas:


21

Você precisará fazer uma análise de string e depois passar um valor formatado apropriado para DATEVALUE- algo como isto:

=DATEVALUE(RIGHT(A1,2)&"-"&MID(A1,6,3)&"-"&LEFT(A1,4))

(editar: fórmula atualizada - testada e funciona para mim em um exemplo - pode ser necessário refinar, dependendo da sua entrada)


1
+1: Eu já estava pronto na área de transferência quando você postou: = DATEVALUE (DIREITA (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Clique em `` Iniciar

Nunca pensei em reorganizar os bits. Obrigado!
Craig Walker

2
8 anos e várias versões do Excel depois, essa ainda é a resposta mais relevante! Eu desejo que o Excel possa fornecer uma funçãoPARSEDATE([string_value], [date format])
Manu Manjunath 19/07

5

Observe que os nomes dos meses são específicos das Opções Regionais do Windows. Portanto, se as Opções regionais do Windows estiverem definidas como ucraniano, DATEVALUE retornará #VALUE! para "07 de novembro de 2012", mas aceitaria "07 de julho de 2012".


1
Nota muito, muito importante !! É uma pena que o Excel não está reconhecendo tanto configuração regional + Inglês nomes mês / dia por padrão
athanassis

1

A função Excels DateValue depende da região. Se você analisar uma sequência como "04-11-2008" na Europa, ela será analisada em 4 de novembro e nos EUA em 11 de abril.

Para contornar isso, você pode usar a função DateSerial e fazer a análise por conta própria. Isso também pode ser facilmente adaptado ao seu próprio formato de data não padrão.

' Region independent date parsing
' Expects a datetimestr in the format  "04-11-2008 21:39:39"
' The function VBA.DateTime.DateValue() mixes up the date and month in different regions
Function parseDateTime(dateTimeStr As String) As Date

    Dim parts As Variant
    parts = VBA.Strings.Split(dateTimeStr, " ")

    Dim datePart As String, timePart As String
    datePart = parts(0)
    timePart = parts(1)

    Dim dateParts As Variant, day As Integer, month As Integer, year As Integer
    dateParts = VBA.Strings.Split(datePart, "-")
    day = dateParts(0)
    month = dateParts(1)
    year = dateParts(2)

    Dim parsed_date As Date, parsed_time As Date
    parsed_date = VBA.DateTime.DateSerial(year, month, day)
    parsed_time = VBA.DateTime.TimeValue(timePart)

    parseDateTime = parsed_date + parsed_time
End Function
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.