Macro para concatenar el rango A1:AI100 mostrar el resultado por fila y luego guardar ese rango de celda en un archivo txt.

Necesito una macro que haga lo siguiente:

Que concatene el siguiente rango de fila (A15:AI100) hoja2 "que lo concatene de la siguiente manera ejemplo1|ejemplo2|ejemplo3|ejemplo4| y que las celdas que estén en blanco las deje así || " el resultado de la concatenacion sea por fila, por ejemplo A1:AI1 = ejemplo1|ejemplo2|ejemplo3|ejemplo4| , A2:AI2 = ejemplo1|ejemplo2|ejemplo3|ejemplo4| en otras palabras que el rango A1:AI100 NO lo concatene en una sola linea de texto, sino concatenar por filas.

Después que guarde los resultado (rango especificado) en un archivo txt utilizando el nombre del archivo que esta en la hoja1 rango (F12) y la ruta que utilizara para guardar el archivo en la carpeta esta en la hoja1 rango (C11)

1 Respuesta

Respuesta
1

Te anexo la macro

Sub Archivo()
'Por.Dante Amor
    Const DELIMITER As String = "|" 'or "|", vbTab, etc.
    '
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    ruta = h1.[C11]
    If Left(ruta, 1) <> "\" Then ruta = ruta & "\"
    nombre = h1.[F12]
    '
    nFileNum = FreeFile
    Open ruta & nombre & ".txt" For Output As #nFileNum
    For Each r In h2.Range("A15:A100").Rows
        For Each c In h2.Range(h2.Cells(r.Row, "A"), h2.Cells(r.Row, "AI"))
            cadena = cadena & c.Value & DELIMITER
        Next
        Print #nFileNum, cadena
        cadena = Empty
    Next
    Close #nFileNum
    MsgBox "Fin"
End Sub

Revisa que en tu celda C11 tengas una ruta válida, por ejemplo:

C;\trabajo\

Y que en la celda F12 tengas un nombre de archivo


Saludos. Dante Amor

Dante, es exactamente lo que yo necesitaba muchísimas gracias.

Dante, por favor me gustaría dos modificaciones:

1-Tu macro no funciona si hay otra macro existente en otro modulo, no me funcionaba cuando tenia más macro, después de elimine todas las macros tu macro me funciono perfectamente. Este es el error que muestra cuando existe otra macro "Error de compilación: Se esperaba función o una variable"

2-Tu macro me deja el espacio vació que yo te indique || perfectamente, pero ese espacio me gustaría que solo aparezca en las filas que contienen datos, las filas que estén totalmente vacía no muestre nada, yo se que te indique el rango A1:AI100, pero no especifique que si en una fila no hay datos muestre el resultado de esa fila vacía NO que me quede así ||||||||||||||||||||

Dante, nuevamente gracias por tomarte de tu valioso tiempo para responder a mi pregunta. El trabajo que estas haciendo es muy valioso, espero que tu gran trabajo te deje muchos frutos. muchas bendiciones...

Si tienes otras macros habría que revisarlas, ya que esta macro que te entregué no tiene ninguna afectación hacia otras macros.

Si en las otras macros tienes esta instrucción: Option explicit, mejor quita dicha instrucción.

O si las macros que tienes están en eventos de la hojas, también habría que revisarlas.


Te anexo el cambio en la macro para que no te ponga vacíos.

Sub Archivo()
'Por.Dante Amor
    Const DELIMITER As String = "|" 'or "|", vbTab, etc.
    '
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    ruta = h1.[C11]
    If Left(ruta, 1) <> "\" Then ruta = ruta & "\"
    nombre = h1.[F12]
    '
    nFileNum = FreeFile
    Open ruta & nombre & ".txt" For Output As #nFileNum
    For Each r In h2.Range("A15:A100").Rows
        For Each c In h2.Range(h2.Cells(r.Row, "A"), h2.Cells(r.Row, "AI"))
            cadena = cadena & c.Value & DELIMITER
            cadena2 = cadena2 & c.Value
        Next
        If cadena2 <> "" Then
            Print #nFileNum, cadena
        End If
        cadena = Empty
        cadena2 = Empty
    Next
    Close #nFileNum
    MsgBox "Fin"
End Sub

Dante, otra vez muchas gracias.

Tú macro funciona perfectamente!

En el libro de excel que tengo hay varias macros y con la única que esta teniendo conflicto es con la siguiente macro que por cierto es de las macros que tu publicas en otras pregunta así que le doy 1,000 puntos.

Favor revisarla y decirme que tengo que hacerle. Perdona que te este robando tu valioso tiempo.

Esta de más explicarte que hace esta macro, pero por si acaso, sirve para abrir una ventana y buscar la ruta de una carpeta y pegarla en la celda. je je je 

Sub ruta()
'Por.DAM
On Error Resume Next
Set nv = CreateObject("shell.application")
carpeta = nv.browseforfolder(0, "Selecciona una carpeta", 0, wpath).items.Item.Path
If carpeta = "" Then
MsgBox "No has seleccionado ninguna carpeta"
Else
Range("c11") = carpeta
End If

End Sub

¿Y cuál es el conflicto?

¿Qué mensaje de error te envía?

¿En qué línea de la macro se detiene?

Podrías crear una nueva pregunta para este tema

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas