Macro Poner Formato Fecha Para Toda Una Columna

Buen Día
Al estar programando una macro me he encontrado con el siguiente problema, tengo en mi columna C datos como a continuación muestro:
01.06.2011
02.06.2011
13.06.2011
14.06.2011
Los cuales deseo pasar a formato fecha para poder aplicar una función que me permite calcular el numero de semana (de la forma iso), por lo cual necesito sustituir los puntos por diagonales y estoy usando el siguiente código el cual funciona muy bien:
Dim iRow As Long
iRow = 2
Do Until IsEmpty(Cells(iRow, "C"))
Cells(iRow, "C") = Replace(Cells(iRow, "C"), ".", "/")
iRow = iRow + 1
Loop
Después de aplicarlo mis datos quedan de la forma 01/06/2011, etc mi 1er problema es que cuando aplico formato de fecha (he probado varios tipos de formato fecha hasta el custom) a la columna solo algunos datos lo aceptan y los demás no cambian, mi función para calcular el numero de semana es: (esta función la aplico a todas las celdas de la columna C)
Public Function IsoWeekNumber(d1 As Date) As Integer
Dim d2 As Long
d2 = DateSerial(Year(d1 - Weekday(d1 - 1) + 4), 1, 3)
IsoWeekNumber = Int((d1 - d2 + Weekday(d2) + 5) / 7)
End Function
La función se ejecuta de manera correcta en toda la columna pero en algunas celdas mi función voltea el mes por el día, es decir, si tengo 01/06/2011, puede que lo tome como 06/01/2011 y así realice el calculo, mi maquina esta en ingles al igual que mi office, lo que necesito es que mis celdas de la columna C tengan un formato de fecha todas de manera igual para poder usar mi función IsoWeekNumber ( ).
Alguien me podría ayudar por favor, lo agradecería muchísimo.
Saludos
Respuesta
1
Al pasar los puntos por diagonales, te aseguraste que el dato en la celda no tiene espacios ( ¿al principio o final de la cadena? ) , puedes comprobar con la funcion =largo()
Para una celda con fecha debería dar 5 como largo de la cadena ( pues evalúa la celda como fecha en su contexto numero de serie).
Lo otro es directo desde el bucle
Cells(iRow, "C") = TRIM(Replace(Cells(iRow, "C"), ".", "/") )
Hola
Antes que todo muchas gracias por el consejo, ya reemplacé mi linea bucle por la que me has sugerido:
Cells(iRow, "C") = TRIM(Replace(Cells(iRow, "C"), ".", "/") )
De igual manera un dato de la forma 01.06.2011 si lo sustituye por 01/06/2011 (toda la columna queda igual) pero al aplicarle formato a la columna tipo date o custom (dd/mmm/aaaa) sucede lo siguiente:
Algunos datos de la forma 01.06.2011 pasan a 01/jun/2011 (este tipo de datos antes de aplicar el formato se encuentran alineados a la derecha de la columna)
Otros simplemente después de hacer la sustitución de los puntos por las diagonal y aplicarle el formato de celda custom (dd/mmm/aaaa) se mantienen de la forma 01/06/2011 y se encuentran alineados a la izquierda de la celda
¿Por qué sigue sucediendo esto? ¿Alguna idea para poder aplicar formato para que cuando aplique mi función IsoWeeKnumber () el calculo sea de manera correcta?
Un saludo y muchas gracias :D
Mmmm...
Mira, copie los formatos que pusiste a modo de ejemplo, luego ( en forma manual) seleccione toda la columna, utilice CTRL + B en su forma de reemplazo, buscando todos los puntos y cambiándolos por /, al realizarlo automáticamente los formatos quedaron como fechas, es decir en forma correcta
Es dificl tratar de explicar lo que te pasa si no puedo replicar el comportamiento de tus datos.
Lo primero siempre es depurar la data ( extraer espacios de la cadena)
reemplazar los caracteres . por /
Lo último que se me ocurre es realiza un bucle para recorrer ese rango y súmale cero a cada fecha
Sub fecha()
Dim r As Range
For Each r In Range("A1:A10")
r = r + 0
Next
Set r = Nothing
End Sub
Esto lo hago cada vez que tengo números como texto para pasarlos a numero, no se ... puede ser.
Muchas Gracias Por El Apoyo, el problema de manipulación logré solucionarlo después de todo, aunque no fue tan fácil, te agradezco la atención a mi pregunta y muchas gracias por el code
Cells(iRow, "C") = TRIM(Replace(Cells(iRow, "C"), ".", "/") )
Lo he aplicado a otra parte de la macro y me ha funcionado bastante bien.
Te envío un cordial saludo, esperando que estés muy bien.
:)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas