Datos de un block de notas a excel y clasificarlos.

De tres archivos (.REL= que son datos que puedo abrir con un bloc de notas los unifico con un programa a un único bloc de notas.

Este archivo esta separado por " entre datos, lo cual puedo pasar a un excel en 6 columnas.

Las columnas serian:

72 , 14 , 9 , 15 , 1116 , A1

274, 14, 8, 10, 1335, B1

281, 13, 4, 26, 1722, C1

Legajo, año, mes, día, horas y minutos (11:16) y Sucurlal(A1, B1, C1)

Son archivos de más de 20.000 filas, ya que los empleados registran fichadas 4 veces al día, por ejemplo las cuales debería agrupar por NUMERO DE LEGAJO y a su vez POR DÍAS.

72 , 14 , 9 , 15 , 0701 , A1

72 , 14 , 9 , 15 , 1216 , A1

72 , 14 , 9 , 15 , 1600 , A1

72 , 14 , 9 , 15 , 2107 , A1

Y asi yo necesitaria la separaçion de celdas *

72 *   Franco Hugo   *  14/09/2014 *Miercoles  *06:59*A1  *12:07  *A1*15:59  *A1 *21:05 *A1

72  *  Franco Hugo  *  15/09/2014 *Jueves     * 07:01 *A1*  12:16 *A1 *16:00 *A1 * 21:07 *A1

Podría hacerlos manualmente claro, pero tengo usadas muchas macros gracias a ustedes, y muchas más sencillas que he hecho yo.
Pero de este calibre, no.

Si les interesa, ya que podrían trabajar con los archivos originales les envío como vienen:

"000072","14","09","15","1116","A1"
"000021","14","09","15","1218","A1"
"000756","14","09","15","1235","A1"
"000090","14","09","15","1301","B1"
"000090","14","09","15","1302","B1"
"000329","14","09","15","1302","A1"
"000331","14","09","15","1431","A1"
"000104","14","09","15","1432","A1"
"000501","14","09","15","1433","B1"
"000348","14","09","15","1433","A1"
"000350","14","09","15","1437","A1"
"000205","14","09","15","1440","A1"
"000072","14","09","15","1548","A1"
"000756","14","09","15","1558","C1"
"000331","14","09","15","1559","A1"
"000104","14","09","15","1600","A1"
"000021","14","09","15","1601","A1"
"000145","14","09","15","1617","A1"

Desde ya, muchísimas gracias. Acepto Macros o Funciones, per admito que me llevo mejor con macros.

1 Respuesta

Respuesta
1

Leo.

- Pon lo siguiente en un módulo normal:

Sub De_Rel_a_Excel()
'-------------------
'by Cacho Rodríguez
'-------------------
Dim mTxt, iLine, iKey
Dim ws As Worksheet, mDic
With ThisWorkbook: ChDrive .Path: ChDir .Path: End With
On Error Resume Next
  mTxt = Application.GetOpenFilename("Archivos rel (*.rel),*.rel", Title:="Selecciona un *.rel")
On Error GoTo 0
If mTxt = False Then Exit Sub
Application.ScreenUpdating = False
Set mDic = CreateObject("Scripting.Dictionary")
ReDim iLine(0 To 3)
Close
Open mTxt For Input As #1
Do Until EOF(1)
  Line Input #1, mTxt
  mTxt = Split(Replace(mTxt, """", ""), ",")
  iLine(0) = Val(mTxt(0))
  iLine(1) = DateSerial(mTxt(1), mTxt(2), mTxt(3))
  iLine(2) = CDate(Replace(mTxt(4), Right(mTxt(4), 2), ":") & Right(mTxt(4), 2))
  iLine(3) = mTxt(5)
  iKey = iLine(0) & "@" & iLine(1)
  Select Case True
    Case mDic.Exists(iKey)
      mDic.Item(iKey) = mDic.Item(iKey) & "@" & iLine(2) & "@" & iLine(3)
    Case Else
      mDic.Item(iKey) = iKey & "@" & iLine(2) & "@" & iLine(3)
  End Select
Loop
Close
iLine = mDic.Items
ReDim mDic(0 To UBound(iLine), 0 To 0)
For iKey = 0 To UBound(iLine)
  mDic(iKey, 0) = iLine(iKey)
Next
Set ws = Workbooks.Add.Sheets(1)
With ws.[a1:g1]: .Value = Array("Leg", "Apellido y Nombre", "Fecha", "Hora", "Suc", "Hora", "Suc")
  .Font.Bold = True: .HorizontalAlignment = xlCenter: End With
With ws.[a2].Resize(1 + UBound(iLine))
  .Value = mDic
  mDic = Empty
  .TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="@", _
    FieldInfo:=Array(Array(1, 1), Array(2, 4), Array(3, 1), Array(4, 1), _
    Array(5, 1), Array(6, 1))
  .Offset(, 1).Insert Shift:=xlToRight
End With
With ws.[a1].CurrentRegion
  .Columns(3).NumberFormat = "_Qddd dd/mmm/yy_Q"
  .Columns(4).NumberFormat = "_Qhh:mm_Q"
  .Columns(6).NumberFormat = "_Qhh:mm_Q"
  .Columns.AutoFit
  .Sort .Range("a1"), xlAscending, key2:=.Range("c1"), order2:=xlAscending, Header:=True
End With
Application.ScreenUpdating = True
End Sub

- Graba el libro en la carpeta que preferas
- Ejecuta la macro
¿Te sirve la idea?...

Mario, no funciono. La macro donde y en que momento la ejecuto?

Intente sobre el primer ejemplo y no funciono.

También lo intenté sobre el único ejemplo que has mostrado y su resultado ha sido exacto.

Te diría que subas a un servidor (de los gratuitos) un zip conteniendo dos archivos: el de texto y el excel tal y como quieres terminar teniendo tus datos escritos manualmente.
Por cierto: que el excel no deje de incluir tu implementación de la macro para ver donde te has equivocado.

¿Tengo otra opción de enviarte los archivos? No se subir más que a google drive.

La Macro funciona Perfecta!!! muchas gracias. Tuve un error al expresar como venia el archivo .rel

No era este: 72 , 14 , 9 , 15 , 1116 , A1

Era Asi: "000104","14","09","15","1600","A1" 

Entonces deberia cambiar unos valores para que funcione no?

Jajajajajaja... Amigo Leo: ¡Eres el rey de la contradicción!... Jajajajaajajajjjjajja
Mira:
- Por un lado afirmas que la macro funciona perfecto... Pero, y por otro lado, preguntas qué deberías cambiar para que funcione...
- Además aclaras que la info del .rel no es de una forma sino de otra. Mas tú mismo lo habías dejado en claro en tu primer mensaje... ¡Y es en lo que me basé para desarrollar la propuesta!
- Finalmente, indicas que sólo sabes subir tu archivo al google drive. Por lo que pregunto: ¿No es -acaso- el google drive un servidor gratuito?...
Bueno, y resumiendo:
Desde mi punto de vista la solución propuesta debería funcionarte (siempre que no se te haya olvidado describir algún factor importante adicional).
Analízalo y, cualquier cosilla, sube al google drive tu implementación y la vemos, ¿Ok?...

Lo que menos quiero hacer es perder tiempo a un experto.

Pero aclarando mi primer mensaje, cuando digo que puedo pasar un archivo .rel a columnas y las columnas serian:

72 , 14 , 9 , 15 , 1116 , A1  estoy diciendo que ya es un excel y te muestro como lo necesito a continuacion de eso.

Cuando digo como vienen los archivos originales , por si necesitas saberlo:

Si les interesa, ya que podrían trabajar con los archivos originales les envío como vienen:

"000331","14","09","15","1431","A1" 
"000104","14","09","15","1432","A1" 
"000501","14","09","15","1433","B1" 

es para que tomes en cuenta eso tambien. Aqui estan las comas y las comillas tal cual vienen.

Osea, la macro que me distes no funciona sobre el excel, el primero que nombro separados por culumnas.

Pero me da la opcion de abril el .rel, y funciona perfectamente si yo, al archivo .rel les saco las comillas manualmente. 

No con el archivo original.

Trate de ser claro con la informacion de un principio, pero quizas no lo fui, si trabajastes sobre datos erroneos, trate de ser claro y creo que lo fui.

El experto no soy yo, trato de expresarme como puedo.

Bueno, y resumiendo tu macro funciona con un .rel con estos datos.

72 , 14 , 9 , 15 , 1116 , A1 

Yo necesito que funcione con:

"000072","14","09","15","1116","A1" 

si necesitas alguna aclaracion pidemela, no se como compartir mis archivos de google drive, yo pense que te refierias a mediafire, freakshare etc.

No soy el rey de la contradiccion.
Cuando digo que me exprese mal, quise decir no prestastes atencion. Fue cordialidad.

Una vez que sepa como compartir mis archivos en goolg e drive te escribo, me voy a dedicar a aprender.

Esta es la primera vez que subo archivos.

Este es el archivo original:

https://drive.google.com/file/d/0BzvAwASy11QJMDFGdFAtQVQ3MEk/edit?usp=sharing 

Este es un excel con tu macro intacta:

https://drive.google.com/file/d/0BzvAwASy11QJSGI5N3VOT1Zib2M/edit?usp=sharing 

Este es el archivo final que utilizo para trabajar:

https://drive.google.com/file/d/0BzvAwASy11QJZ09oTkFDVkFTNUE/edit?usp=sharing 

Espero que haya subido bien los archivos, cualquier cosa me avisas y aporto lo que necesites.

¡Todo un misterio!...
a) La macro funciona tal y como la necesitas, pero dices que no funciona para ello.
b) ¿Puedes creer que no me ha sido posible acceder a ninguno de tus tres archivos?
c) Te muestro un enlace: De rel a Excel. Allí tienes un excel con la macro y un .rel con la información que has publicado en tu primer mensaje.
Te sugiero que pongas a estos dos archivos en un carpeta cualquiera, que ejecutes la macro y luego me cuentes, ¿De acuerdo?...

De acuerdo!

Si bien en el archivo que me enviastes, contiene el mismo esquema que los mios, hay algo en los mios que no funciona.

Sera el excel 2003?

Se ha producido un error ´13´ en tiempo de ejecucion:

No coinciden los tipos.

La linea que me da error la ilumina de amarillo:

iLine(2) = CDate(Replace(mTxt(4), Right(mTxt(4), 2), ":") & Right(mTxt(4), 2))

¡Ahora sí!... Con los datos a la vista es otra cosa.
Intenta, entonces, con: De_rel_a_Excel.zip

Bueno, hay algo que no funciona.

Se ha producido el error 9 en tiempo de ejecución

Sub indice fuera del intervalo.

Pero, yo copio los datos de mi primer mensaje sobre un archivo .rel y funciona.

Pero no en los originales.

Los orginales deben tener algo que, al copiar y pegar, no lo puedo detectar ya que cuando copio el contenido de un archivo original a un .rel vacío también me genera el mismo error.

Es indispensable que te envíe todos los archivos.

Por eso tuve que experimentar y crear una cuenta mediafire, subí los archivos para que trabajes como se debe.

Comp01

Comp02

Comp03

Son tres archivos .rel originales.

La hoja nueva de Microsoft exvel (2003) es donde esta la macro.

Y el archivo con nombre FINAL es como yo necesito los datos.

 http://www.mediafire.com/view/3dd9888csgb6v78/Comp01.rel

http://www.mediafire.com/view/m64h29479l6lof6/Comp02.rel 

http://www.mediafire.com/view/m039fgjy3gj4do9/Comp03.rel

http://www.mediafire.com/view/j56yzldc7dsfkdr/Nuevo_Hoja_de_cálculo_de_Microsoft_Excel.xls 

http://www.mediafire.com/view/5ncma1cldn2ee14/Final.xls 

Ojala lo puedas solucionar. Estoy las ordenes.

A mí todo me funciona perfectamente.
Te sugiero que intentes probar con los 3 .rel y el excel versión 2003 en otra máquina.

¡Gracias! 

Esto funciona en otra maquina con version .xlsx

Tu Macro no es el inconveniente. Por eso tu trabajo esta bien echo, pero hasta que trate de identificarlo, mientras no funcionaba.
Mas adelante si tengo que ejecutar una consulta no me anclare solo a mi ordenador, buscare alternativas antes de decir si funciona o no.

Pero quédate tranquil que funciono.

Muchas gracias por tu tiempo, valoro mucho.

Leonardo.

Gracias por valorarlo y ojala te sea de utilidad.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas