¿Cómo analizo un formato de fecha no estándar en Excel?

24

Tengo una columna de valores de cadena tipo fecha en el formato yyyy-mm-dd, como 2011-Sep-13. Necesito convertirlos a números de serie de fechas de Excel para poder usarlos en fórmulas.

DATEVALUE no puede reconocer este formato; Acabo de llegar #VALUE!cuando lo intento. Tampoco toma un formato de fecha personalizado (a diferencia de la mayoría de los lenguajes de programación).

¿Cómo puedo convertir formatos de fecha arbitrarios en valores de fecha de Excel?

Craig Walker
fuente

Respuestas:

21

Tendrá que hacer un análisis de cadenas, luego pasar un valor formateado apropiado DATEVALUE, algo como esto:

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

(editar: fórmula actualizada - probada y funciona para mí en un ejemplo - puede que necesite refinar dependiendo de su entrada)

Aerik
fuente
1
+1: Tenía esto en el portapapeles listo para publicar cuando publicaste: = DATEVALUE (RIGHT (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Excellll
Je, nunca pensé en reorganizar las partes. ¡Gracias!
Craig Walker
2
8 años y varias versiones de Excel más tarde, ¡esta sigue siendo la respuesta más relevante! Deseo que Excel pueda proporcionar una funciónPARSEDATE([string_value], [date format])
Manu Manjunath
5

Tenga en cuenta que los nombres de los meses son específicos de las Opciones regionales de Windows. Por lo tanto, si sus Opciones regionales de Windows están configuradas en ucraniano, ¡DATEVALUE devolverá #VALUE! para "07-Nov-2012", pero aceptaría "07-Лис-2012".

Olexa
fuente
1
Nota muy muy importante !! Es una pena que Excel no reconozca ambos ajustes regionales + nombres de mes / día en inglés de forma predeterminada
athanassis
1

La función Excels DateValue depende de la región. Si analiza una cadena como "04-11-2008" en Europa, se analizaría el 4 de noviembre y en los Estados Unidos el 11 de abril.

Para evitar esto, puede utilizar la función DateSerial y realizar el análisis usted mismo. Esto también se puede adaptar fácilmente a su propio formato de fecha no estándar.

' 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
CodeKid
fuente