Excel - Un archivo txt por cada fila de excel con nombre del txt de una celda

 
Vista:
Imágen de perfil de Nicolas
Val: 2
Ha aumentado su posición en 19 puestos en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Nicolas (1 intervención) el 19/07/2019 15:10:27
filas1

Buen Dia!.
Quisiera, por favor, si me pueden ayudar en lo siguiente:
Convertir cada fila del excel en un archivo txt separado y automaticamente. Cuyos nombres sean el valor de una celda en particular de la Fila.
deberia generar archivos txt por ejemplo: juan.txt, maria.txt, pedro.txt

Mil Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.826
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Andres Leonardo (1418 intervenciones) el 19/07/2019 15:55:42
Bueno hacerlo no es complicado, lo importante es que necesitas que tenga cada archivo
los campos separados por , o | ??

en todo caso seria esto
Pd: Ese codigo guarda los archivos en la misma ruta del libro de Excel.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Macro1()
'Crea un archivo por cada linea , le pone el nombre de la celda b.txt 
' separador PIPE , longitud variable, 
' Macro1 Macro
' Acceso directo: CTRL+q
    Limite = Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
    For i = 2 To Limite
        Data = Range("A" & i).Value & "|" & Range("B" & i).Value & "|" & Range("C" & i).Value & "|" & Range("D" & i).Value & "|" & Range("E" & i).Value & "|" & Range("F" & i).Value
        Filename = Application.ActiveWorkbook.Path & "\" & Range("B" & i).Value & ".txt"
        Open Filename For Append As #1
            Print #1, Data
        Close #1
    Next i
End Sub


Captura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Dirk
Val: 658
Bronce
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Dirk (166 intervenciones) el 19/07/2019 16:37:03
Hola Andrés un pregunta, por que usar esa instrucción en la linea 6 y no otra un poco mas fácil como CountA( colmuna A ) o un While EsVacia(celda de columnaA)? y por favor no se entienda esto como una crítica sino que dado tu conocimiento me gustaría saber tu criterio, así aprendo a programar mejor....

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.826
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Andres Leonardo (1418 intervenciones) el 19/07/2019 17:53:21
Dirk

Buenos dias,
No claro que no.. y si lo fuera Pues estas en todo tu derecho (al final del analisis te indico por que lo podrias criticar)

primero es lo primero Vaya pedazo de pregunta : "por que usar esa instrucción en la linea 6? ", bueno la verdad que no tengo una respuesta mas sincera que decir que esta fue la que me enseñaron y esa fue la que aprendí a usar para localizar la celda donde YA no hayan datos de esta manera normalmente hago mis macros defino un limite para que mis bucles cumplan de la mejor manera su ciclos y luego ya no haga nada mas .


Ahora técnicamente contestando a tu consulta :

Por que no (usar) otra un poco mas fácil como CountA( colmuna A ) o un While EsVacia(celda de columnaA)? , pues considero que la primera es una función que me devuelve el valor en una sola linea que lo podría usar de igual mandera con el COUNT de la columna A pero nunca lo he usado no lo conozco como aplicarlo y me gustaría claro esta que me indiques si conoces como hacerlo para evaluarlo, mientras que hacer un While pues serian mas sentencias y bajaríamos el rendimiento de la macro, por que si bien en este caso son menos de 10 lineas imaginemos en un libro de 10000 registros recorrer los 10Mil para solo adivinar el limite, ahora nos podríamos poner creativos y evitar hacer esto e ir directo al grano y crear un while y verificar mientras la celda no sea vacia crear el archivos

Mira el codigo:
1
2
3
4
5
6
7
8
9
i = 2
   while  Range("A" & i).Value <> ""
        Data = Range("A" & i).Value & "|" & Range("B" & i).Value & "|" & Range("C" & i).Value & "|" & Range("D" & i).Value & "|" & Range("E" & i).Value & "|" & Range("F" & i).Value
        Filename = Application.ActiveWorkbook.Path & "\" & Range("B" & i).Value & ".txt"
        Open Filename For Append As #1
            Print #1, Data
        Close #1
        i =i  + 1
wend

lo cual vendría a detonar mi teoría de la lógica de programación en las personas y esta dice .. Cada persona tiene una logica completamente diferente como una huella digital y muy, pero muy dificil se parezca a otra en todos los casos , lo importante en este tema son 3 cosas

Que el programa :
Que haga lo que tiene que hacer sin errores
Intentar a medida de lo posible que este optimizada
Y que No siempre la primera versión es la mejor

Por esta razón es cuestionable cualquier macro y siempre hazlo espo siempre ayuda a mejorar, espero que te ayude.

Saludos desde Ecuador
Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de alfredo lara
Val: 367
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por alfredo lara (103 intervenciones) el 19/07/2019 22:55:18
Saludos Dirk y Andres

"por que usar esa instrucción en la linea 6?
Muy buena pregunta.
Según se la función CountA cuenta todas la filas que contengan datos, pero si entre ellas hay una celda vacía en tu código podrías tener un error , P ej:

Fila 1 = Pedro
Fila 2 = Maria
Fila 3 =
Fila 4 = Juan
Fila 5 = Salvador

La función CountA daría 4
Por el contrario la función que utiliza Andres te devuelve 5

Por lo que habría que poner una validación en la macro por si encuentra una celda vacía,

P. D.
Ya contemplaste si existe dos Pedro en tu lista, seria prudente adicionar no se el numero de fila al nombre del archivo o algún dato extra para diferenciar la duplicidad de nombres

Saludos desde México
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.826
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Andres Leonardo (1418 intervenciones) el 20/07/2019 01:34:41
Alfredo,

Excelente Análisis de la función CountA (no lo conocía) y el cuestiona miento del tema de duplicidad de nombres, esto es lo que ayuda a aprender en los Foros.

Pd: En mi ejemplo si ya existe el archivo pedro, lo que se hará es que creara una nueva linea en este archivo con el segundo dato.

Saludos
Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de alfredo lara
Val: 367
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por alfredo lara (103 intervenciones) el 20/07/2019 18:55:07
CLARO

No me había fijado del código "Append"
hace mucho que no uso ese tipo de archivos, gracias por recordarme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dirk
Val: 658
Bronce
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Dirk (166 intervenciones) el 22/07/2019 20:38:46
Hola Andres, pienso que con CountA me da el valor de una vez, mientras que el programa tendria que ir a la ultima fila y de alli luego ir hasta arriba para saber la fila donde terminar los datos, como dice tu teoria.... mientras haga lo que tenga que hacer sin errores... para mi está bien....

Hola Alfredo, pensé en usar CountA porque asumo que la data ya está procesada o tiene algún nivel de procesamiento o validación como que no hayan duplicados, que los sueldos estén correctos, que los correlativos también estén correctos, que la columna que voy a usar para nombrar los archivos tienen data y que no va a generar duplicidad (que no hayan 2 Jose, ni 2 Jose Gonzalez, ni 2 Jose Gonzalez en la misma Sucursal) y he allí lo importante de las validaciones previas, muy importante que Nicolas tome en cuenta esta situación, de cualquiera de las dos formas si tengo 10.000 registros debo tener 10.000 archivos también, eso me serviría como indicador de que todo se procesó bien.

El lo particular me gusta mas el codigo con While...

Salu2...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Hector
Val: 857
Bronce
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Hector (137 intervenciones) el 21/07/2019 00:13:51
Buen dia, prueba este código; debes validar que tengas permiso en el path

1
2
3
4
5
6
7
8
9
10
Sub CrearArchivoTexto()
   'Explora hasta la ultima fila activa en la hoja
    Set fs = CreateObject("Scripting.FileSystemObject")
    For Cont = 2 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
        If Len(Range("B" & Cont).Value) >= 1 Then
           Set a = fs.CreateTextFile("D:\" & Range("B" & Cont).Value & ".txt", True)
           a.Close
        End If
    Next Cont
End Sub

o

1
2
3
4
5
6
7
8
9
10
Sub CrearArchivoTexto2()
    'Explora hasta encontrar la primera celda vacia
    Set fs = CreateObject("Scripting.FileSystemObject")
    Cont = 2
    Do While Len(Range("B" & Cont).Value) >= 1
       Set a = fs.CreateTextFile("D:\" & Range("B" & Cont).Value & ".txt", True)
       a.Close
       Cont = Cont + 1
    Loop
End Sub

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Hector
Val: 857
Bronce
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Hector (137 intervenciones) el 21/07/2019 00:45:34
Buen dia, prueba este código; debes validar que tengas permiso en la ruta
olvide anexar la funcion trim

1
2
3
4
5
6
7
8
9
10
Sub CrearArchivoTexto()
   'Explora hasta la ultima fila activa en la hoja
    Set fs = CreateObject("Scripting.FileSystemObject")
    For Cont = 2 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
       If Len(Trim(Range("B" & Cont).Value)) >= 1 Then
          Set a = fs.CreateTextFile("D:\" & Range("B" & Cont).Value & ".txt", True)
          a.Close
       End If
    Next Cont
End Sub

o

1
2
3
4
5
6
7
8
9
10
Sub CrearArchivoTexto2()
      'Explora hasta encontrar la primera celda vacia
      Set fs = CreateObject("Scripting.FileSystemObject")
      Cont = 2
      Do While Len(Trim(Range("B" & Cont).Value)) >= 1
            Set a = fs.CreateTextFile("D:\" & Range("B" & Cont).Value & ".txt", True)
            a.Close
            Cont = Cont + 1
      Loop
End Sub

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.826
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Un archivo txt por cada fila de excel con nombre del txt de una celda

Publicado por Andres Leonardo (1418 intervenciones) el 22/07/2019 15:52:07
Hector
Buenos dias,
Excelente codigo, solo un tema deberias considerar que la referencia este habilitada
Microsoft Scripting Runtime Library (Scrrun.dll)

SAludos
Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar