Fórmula do Excel para converter formatos de data

1

Supondo que eu tenha células que tenham valores de texto mencionados como:

02/23/15 to 03/01/15

Posso usar as funções do Excel para converter isso em algo como

23-Feb-15 to 1-Mar-15

Até agora, olhei para a fórmula DATEVALUE , mas isso não parece resolver meu problema específico.

Acho que o que estou procurando é: como faço para especificar um formato de data (digamos "dd / mm / aa") para uma string (digamos "02/16/15") e convertê-lo para uma string de data em outro formato (digamos "dd-mmm-aa")

    
por Ayusman 19.03.2015 / 11:34

2 respostas

2

Veja uma fórmula que funciona para o seu exemplo, independentemente das suas configurações de localidade:

=TEXT(DATE(MID(A1,7,2),LEFT(A1,2),MID(A1,4,2)),"dd-mmm-yy") & " to " & TEXT(DATE(RIGHT(A1,2),MID(A1,13,2),MID(A1,16,2)),"dd-mmm-yy")

Aqui está uma que funciona, não importa o que há entre as datas, desde que as datas sejam do formato mm / dd / aa e no início e no final:

=TEXT(DATE(MID(A1,7,2),LEFT(A1,2),MID(A1,4,2)),"dd-mmm-yy") & MID(A1,9,LEN(A1)-16) & TEXT(DATE(RIGHT(A1,2),MID(A1,LEN(A1)-7,2),MID(A1,LEN(A1)-4,2)),"dd-mmm-yy")

Dependendo da sua situação, essa outra opção pode ou não ser útil. Você pode alterar o formato de data padrão do sistema. Isso afeta as funções de data do Excel para que elas esperem que as datas estejam nesse formato. Uma vez feito, você pode usar a função DATEVALUE bem. Se essa for uma operação única, sugiro alterar o formato, executar as fórmulas e alterá-lo novamente. Caso contrário, eu iria com uma abordagem de fórmula. Você pode obter todos os detalhes de como alterar as configurações do sistema aqui . (Eu não copiei e colei tudo porque é longo .)

    
por 19.03.2015 / 13:26
0

Você pode tentar isso (estou usando o formato de data do Reino Unido)

=CONCATENATE(TEXT(LEFT(A1,8), "dd-mmm-yy")," to ",TEXT(RIGHT(A1,8), "dd-mmm-yy"))

Comovocêpodever,eleesperaqueosformatosdedatatenhamumtamanhofixo(8caracteres,comomm/dd/aaou/dd/mm/aa).

Comooacimanãoestáfuncionando,vocêpodetentaroVBa,queleráovaloratualemColAecolaráonovovaloremColB

OptionExplicitSubYikesThereBePirates()DimrowAsIntegerrow=1DoWhileRange("A" & row).Value <> ""

    Dim splitty() As String
    splitty = Split(Range("A" & row).Value, " to ")

    Dim newFirstDate As String
    Dim newSecondDate As String

    newFirstDate = GetDate(splitty(0))
    newSecondDate = GetDate(splitty(1))

    Range("B" & row).Value = newFirstDate & " to " & newSecondDate

row = row + 1
Loop


End Sub

Function GetDate(d As String) As String

Dim splitty() As String
splitty = Split(d, "/")
Dim mnth As String

Select Case (splitty(0))
    Case "01"
    mnth = "Jan"
    Case "02"
    mnth = "Feb"
    Case "03"
    mnth = "Mar"
    Case "04"
    mnth = "Apr"
    Case "05"
    mnth = "May"
    Case "06"
    mnth = "Jun"
    Case "07"
    mnth = "Jul"
    Case "08"
    mnth = "Aug"
    Case "09"
    mnth = "Sep"
    Case "10"
    mnth = "Oct"
    Case "11"
    mnth = "Nov"
    Case "12"
    mnth = "Dec"
  End Select

    GetDate = splitty(1) & "-" & mnth & "-" & splitty(2)

End Function

Além disso, usei o formato de data dos EUA também para que o VBa correspondesse à sua consulta.

Como eu adiciono o VBA no MS Office?

Lembre-se com o VBa, faça uma cópia do arquivo primeiro como backup (não há opção para desfazer)

    
por 19.03.2015 / 12:06