Buenas tardes, tengo un problema con una macros

Buenas tardes tengo un problema con una macro la cual al momento de pegar datos en una hoja de excel ( otro libro ) cambia el formato de la fecha de dd/mm/aaaa amm/dd/aaaa tengo una macro que cambia los de la primera columna pero nunca llega a la segunda columna podrían ayudarme este es mi código
Sub fechas()
For Each cell In Range("a3:a" & Range("a" & Rows.Count).End(xlUp).Row)
If cell.Value = "" Then
Else
If Len(cell) = 8 Then
fec = Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 7, 2)
cell.Value = CDate(fec)
Else
fec = Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 7, 4)
cell.Value = CDate(fec) <--- aca me marca el problema una vez que termina los datos de lacolumna y no pasa a la otra
End If
End If
Next cell
For Each cell In Range("b3:b" & Range("b" & Rows.Count).End(xlUp).Row)
If cell.Value = "" Then
Else
If Len(cell) = 8 Then
fec = Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 7, 2)
cell.Value = CDate(fec)
Else
fec = Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 7, 4)
cell.Value = CDate(fec)
End If
End If
Next cell
End Sub

1 respuesta

Respuesta
1

Cópiame el archivo con la macro a la siguiente dirección de correo [email protected] aparentemente está bien; pero es mejor que corra la macro para ver cómo se comporta.

Ya te envíe el archivo para que puedas revisarlo gracias

Explicame una duda.

¿Los datos originales de la hoja son tipo fecha o texto? Las formulas que estás usando son para texto, recuerda que las fechas internamente son un número.

Si son tipo fecha te sugiero utilizar las funciones year(), month() y day() y hacer el cambio entre mes y dia.

Si son tipo texto funcionan correctamente.

lo que pasa es que esos datos son copiados de una bse de datos mediante mediante un macro y son de formato fecha por lo general son de 60 a 100 datos por columna el problema radica en las columnas que tienen fecha ya que las invierte de dd/mm/aaaa a mm/dd/aaaa

No me hice entender. ¿Los datos de fecha de la base de datos están en formato de texto?

Ejemplo '02/04/2014 en este caso la fecha no es número y las funciones que estás utilizando te funcionan porque no es fecha, es texto con formato de fecha y estarían alineados hacia la izquierda

El mismo dato pero como fecha es igual a 41674 en excel, por eso no te coinciden los tipos. En este caso en lugar de utilizar mid() debes utilizar year(), month() y day() y cambiar el orden utilizando str() y cdate()

Otra opción que no necesita macro es que tu cambies la configuración regional en tu computador con el mismo formato de fecha de la base de datos así la conversión es directa.

Si me puedes enviar unos registros de esa base de datos para analizarla.

Brian prueba este código.

<pre class="prettyprint" style="width: 533px; height: 320px;">Sub fechas()
For Each cell In Range("a3:a" & Range("a" & Rows.Count).End(xlUp).Row)
If IsDate(cell.Value) Then
cell.NumberFormat = "dd/mm/yyyy"
Else If cell <> "" Then
If Len(cell) = 8 Then fec = Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 7, 2)
cell.Value = CDate(fec)
Else
fec = Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 7, 4)
cell.Value = CDate(fec)
End If
End If
End If
Next cell
For Each cell In Range("b3:b" & Range("b" & Rows.Count).End(xlUp).Row)
If IsDate(cell.Value) Then
cell.NumberFormat = "dd/mm/yyyy"
Else
If cell <> "" Then
If Len(cell) = 8 Then
fec = Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 7, 2)
cell.Value = CDate(fec)
Else
fec = Mid(cell.Value, 4, 2) & "/" & Mid(cell.Value, 1, 2) & "/" & Mid(cell.Value, 7, 4)
cell.Value = CDate(fec)
End If
End If
End If
Next cell
End Sub</pre>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas