example convert cdate excel vba excel-vba

cdate - Excel VBA-¿Convertir texto a la fecha?



vba format date example (8)

Puede usar DateValue para convertir su cadena a una fecha en esta instancia

Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = DateValue(c.Value) Next c

Puede convertir la cadena de formato yyyy-mm-dd directamente en un valor de fecha de Excel nativo.

Tengo una columna de fechas (columna A) almacenada como texto en el formato aaaa-mm-dd que estoy tratando de convertir a fechas, en definitiva para que pueda hacer búsquedas contra ellas.

He leído algunos temas aquí e intenté algunas de las sugerencias, pero no puedo hacer que nada funcione. Uno estaba usando:

Columns("A").Select Selection.NumberFormat = "date"

Esto cambió el formato de las celdas hasta la fecha, pero en realidad no cambió el formato del valor que todavía estaba almacenado como texto.

Tengo entendido que necesito usar CDate () para cambiar el formato del valor de texto a fecha. He intentado algo como esto:

Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = CDate(c.Value) Next c

Lo que me da un error de desajuste de tipo. Me preguntaba si esto era porque estaba tratando de guardar los valores de fecha en una celda formateada sin fecha, así que traté de combinarlo con .NumberFormat = "date", que tampoco funcionó.

Cualquier sugerencia sera apreciada.


Quizás:

Sub dateCNV() Dim N As Long, r As Range, s As String N = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To N Set r = Cells(i, "A") s = r.Text r.Clear r.Value = DateSerial(Left(s, 4), Mid(s, 6, 2), Right(s, 2)) Next i End Sub

Esto supone que la columna A contiene valores de texto como 2013-12-25 sin celda de encabezado.


Para el OP ... También recibí un error de desajuste de tipo la primera vez que intenté ejecutar su subrutina. En mi caso, esto se debió a datos sin fecha en la primera celda (es decir, un encabezado). Cuando cambié el contenido de la celda del encabezado por texto de fecha y hora para probar, funcionó perfectamente ...

Espero que esto ayude también.


Puede convertir rápidamente una columna de texto que se asemeje a fechas en fechas reales con el equivalente de VBA del comando Data ► Text-to-Columns de la hoja de cálculo.

With ActiveSheet.UsedRange.Columns("A").Cells .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, xlYMDFormat) .NumberFormat = "yyyy-mm-dd" ''change to any date-based number format you prefer the cells to display End With

Las operaciones masivas generalmente son mucho más rápidas que el bucle a través de las celdas y el método Range.TextToColumns de VBA es muy rápido. También le permite la libertad de establecer una máscara de conversión MDY frente a DMY o YMD que afecta a muchas importaciones de texto donde el formato de fecha no coincide con la configuración regional del sistema. Consulte la propiedad TextFileColumnDataTypes para obtener una lista completa de los formatos de fecha disponibles disponibles.

Advertencia: tenga cuidado al importar texto que algunas de las fechas no se han convertido aún. Una fecha basada en texto con enteros ambiguos de mes y día puede haberse convertido erróneamente; por ejemplo, 07/11/2015 puede haber sido interpretado como 07-Nov-2015 o 11-Jul-2015 dependiendo de la configuración regional del sistema. En casos como este, abandone la importación y vuelva a introducir el texto con Datos ► Obtener datos externos ► De texto y especifique la máscara de conversión de fecha correcta en el asistente de importación de texto. En VBA, use el método Workbooks.OpenText y especifique xlColumnDataType.


Este código me funciona

Dim N As Long, r As Range N = Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To N Set r = Cells(i, "B") r.Value = CDate(r.Value) Next i

Pruébalo cambiando las columnas para que se adapte a tu hoja


Además de otras opciones, confirmo que el uso

c.Value = CDate(c.Value)

funciona (solo probado con la descripción de su caso, con Excel 2010). En cuanto a las razones por las que obtiene un error de discrepancia de tipo, puede verificar (por ejemplo) esto .

Puede ser un problema de configuración regional.


Me deshice de la discrepancia de tipos con el siguiente código:

Sub ConvertToDate() Dim r As Range Dim setdate As Range ''in my case I have a header and no blank cells in used range, ''starting from 2nd row, 1st column Set setdate = Range(Cells(2, 1), Cells(2, 1).End(xlDown)) With setdate .NumberFormat = "dd.mm.yyyy" ''I have the data in format "dd.mm.yy" .Value = .Value End With For Each r In setdate r.Value = CDate(r.Value) Next r End Sub

Pero en mi caso particular, tengo los datos en formato "dd.mm.yy"


Para DD - MM -YYYY aquí hay una solución simple para administrar la cadena y las fechas:

inserte la fecha en la cadena a través de DD- MMM -YYYY, por ejemplo, 01-11-2017 -> 01-Nov-2017

U puede usar el FORMATO (fecha, "dd- mmm- aaaa") para ingresar fechas en una cadena de la hoja de cálculo.

Más tarde, cuando lo muestre desde una cadena, no confundirá los días y los meses.