Importar Archivo .Txt a Excel sin interacción del usuario...

Les consulto, tengo que importar a excel un archivo .txt el cual no esta separado por comas, sino por espacios los cuales no son fijos.

Me habían dicho hace algún tiempo que use

"Workbooks.OpenText archivo"

Pero por alguna razón al cargar las fechas me carga mal, una fecha "12/09/2016" me carga "09/12/2016".

¿Habría una forma de solucionar esto?

1 Respuesta

Respuesta
1

03/11/16

Hola, Marcelo

El problema principal es que está usando el formato americano: mes/dia/año

Si estuvieras seguro de que todas las fechas están invertidas, esta fórmula se encarga de ponerla en formato argento (o latino):

=FECHA(AÑO(A2);DIA(A2);MES(A2))

[Considerá si usás comas o punto y coma para separar argumentos de las funciones. Yo usé ";"]
Asignale el formato deseado, luego, copiá esta celda y pegala en las restantes de esta misma columna.

Probá con esto y decime si te resuelve el problema

Si, eventualemente, no fuese posible saber si todas las fechas están invertidas, podríamos encarar una solución con una fórmula más compleja o Visual Basic.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

Muchas gracias por la pronta respuesta!

Yo tengo un código en vb de excel, no lo hago en fórmulas, y no son todas las fechas que me las invierte, por eso no entiendo cual es el problema.

Tenia un archivo de 5 fechas, donde 3 eran "19/09/2016" y 2 fechas eran "12/09/2016", es por eso que no entiendo porque 3 me cambia bien y las otras dos me pasa mal.

Si supieras de un código para hacer el pase estaría genial.

No se como mandarte el archivo txt para que veas como es el archivo

.

Buenas, Marcelo

Suele pasar esto. El problema se plantea porque 12/9/16 es una fecha posible en cualquiera de los dos sistemas, mientras que 19/9/16 sólo puede ser dd/mm/aa porque, claramente, no hay un mes 19.

Cuando MS Excel encuentra una fecha "imposible", la ingresa como texto. Si no, deja un número que representa los días transcurridos entre el 01/01/1900 y tal fecha. Hoy, por ejemplo, es el dia 42677.

Lo notarás si le quitás el formato a las celdas de las fechas. Las que no son fechas pareceran fechas, mientras la que sí son quedarán como un numero de cinco cifras.

Al margen de esto, armé esta rutina que analiza fecha por fecha y decide si modificarla o no.

Sub CorrFecha()
'---- Variables modificables ----
'=== MARCELO, modificá estos datos de acuerdo a tu proyecto:
'
CeldaMes = "B2" 'celda de referencia de mes actual
CeldaIniFech = "G4" 'primera celda con fechas a corregir
'---- fin Variables
'
Range(CeldaIniFech).Select
MesAnA = IIf(IsDate(Range(CeldaMes).Value), Range(CeldaMes).Value)
            Do While Not IsEmpty(ActiveCell)
                Set LaCelda = ActiveCell
                    LaCelda.ClearFormats
                    LaFecha = LaCelda.Value
                        If IsNumeric(LaFecha) Then
                            If Month(LaFecha) <> MesAnA Then
                                LaFecha = CDate(Month(LaFecha) & "-" & Day(LaFecha) & "-" & Year(LaFecha))
                                Colorin = 38
                            End If
                        Else
                            LaFecha = CDate(Mid(LaFecha, 1, 2) & "-" & Mid(LaFecha, 4, 2) & "-" & Right(LaFecha, 2))
                            Colorin = 37
                        End If
                    LaCelda.Value = LaFecha
                    LaCelda.NumberFormat = "dd-mmm-yy"
                    LaCelda.Interior.ColorIndex = Colorin
                LaCelda.Offset(1).Select
            Loop
            Application.StatusBar = False
            Set LaCelda = Nothing
End Sub

Al principio del código hay dos variables que necesita la macro para funcionar:

Donde empiezan las fechas a revisar y un mes de referencia para decidir en los casos dudosos.

Probalo y decime si te ayuda.

Un abrazo

Fer

.

Buenos Días

Este Argunmento me dice que no es opcional

IIf(IsDate(Range(CeldaMes).Value), Range(CeldaMes).Value)

"IIF"

¿Otra cosa La celda B2 debe ser una celda con la fórmula "=HOY()" con eso alcanza?

Ya logre que funcione...esta genial el codigo!

Me solucionaste el problema...muchas gracias!!!

:)

.

Hola, capo

Efectivamente, en la celda B2 o en la que le indiqués, hay que poner una fecha o el mes que ayudará a decidir los casos dudosos. Puede ser =HOY() o el mes a trabajar, dependiendo del período a que se refiera tu base.

Tuve que hacer una corrección al IIF para que tome el mes de una fecha en esa celda o, si está el número de mes, directamente tome ese. Además, para acelerar la ejecución le inhibí la actualización de pantalla.

Usá esta versión entonces:

Sub CorrFecha()
'---- Variables modificables ----
'=== MARCELO, modificá estos datos de acuerdo a tu proyecto:
'
CeldaMes = "B2" 'celda de referencia de mes actual
CeldaIniFech = "G4" 'primera celda con fechas a corregir
'---- fin Variables
'  
Range(CeldaIniFech).Select
Application.ScreenUpdating = False
MesAnA = IIf(IsDate(Range(CeldaMes). Value), Month(Range(CeldaMes). Value), Range(CeldaMes). Value)
            Do While Not IsEmpty(ActiveCell)
                Set LaCelda = ActiveCell
                    LaCelda.ClearFormats
                    LaFecha = LaCelda.Value
                        If IsNumeric(LaFecha) Then
                            If Month(LaFecha) <> MesAnA Then
                                LaFecha = CDate(Month(LaFecha) & "-" & Day(LaFecha) & "-" & Year(LaFecha))
                                Colorin = 38
                            End If
                        Else
                            LaFecha = CDate(Mid(LaFecha, 1, 2) & "-" & Mid(LaFecha, 4, 2) & "-" & Right(LaFecha, 2))
                            Colorin = 37
                        End If
                    LaCelda.Value = LaFecha
                    LaCelda.NumberFormat = "dd-mmm-yy"
                    LaCelda.Interior.ColorIndex = Colorin
                LaCelda.Offset(1).Select
            Loop
            Set LaCelda = Nothing
Application.ScreenUpdating = True
Range(CeldaIniFech).Select
End Sub

Hay una variable ColorIn que pinta aquellas celdas corregidas por imposibles de un color y las dudosas de otro. Si ponés un cero en ellas las deja en blanco.

Me alegro de haberte dado una mano.

Un abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas