¿Código vba para copiar toda la línea que en una celda especifica tenga datos?

Por ejemplo, si en la columna "A1" hay un dato, entonces que toda esa línea se copie en una nueva hoja y así sucesivamente, si están en blanco entonces que las ignore.

1 respuesta

Respuesta
1

Aclara por favor los detalles necesarios para desarrollar una macro:

1- ¿Cuál es la 'celda específica' o cuál columna hay que revisar?

2- ¿Si se pasa la primer fila que cumpla el criterio a una nueva hoja... significa que hay que crearla? ¿Y en ese caso qué nombre asignarle?

3- la siguiente coincidencia... ¿va a la misma nueva hoja creada o se crea una nueva hoja por cada fila encontrada?

Hola Elsa, es la columna "A" la que hay que buscar, pero no todas las celdas en esa columna están llenas, me gustaría un código vba para que copie todas esas filas, obviamente si las celdas de la columna "A" tienen datos y guarde esos datos en un nuevo libro. Muchas Gracias!.

¿Un nuevo libro o una nueva hoja? En tus 2 entradas mencionaste 'nueva hoja'.

Sea lo que fuese, ¿todas las filas encontradas en el mismo destino (hoja o libro)?

Perdón por eso, pero si, tengo un libro que contiene varias hojas, me gustaría extraer la información de cada una, siempre y cuando las celdas de columna "A" estén llenas. Toda esa información me gustaría que se copiara en un nuevo libro, como para tener un resumen o algo parecido. Gracias

Que cuando presione un botón automáticamente se genere un libro nuevo con la información de cada hoja basado en la información de la columna "A" de cada una de ellas.

Solamente me gustaría copiar la información de las celdas que contienen en este caso "1". Si las celdas en columna "A" contienen "1", entoncen que se copien las filas enteras en un ibro nuevo. Muchas Gracias Elsa.

Un modo hubiese sido filtrando las hojas pero no dejaste encabezados por lo que siendo poco extensas las tablas este modo también te resolverá el problema.

Tenés que ajustar las referencias: imaginé datos a partir de fila 7 y que en col B aparecen textos hasta el final. Y el dato a buscar lo coloqué como variable para que puedas ajustar a tu necesidad.

Se crea provisoriamente una hoja que luego se exporta a la misma carpeta donde tengas este libro. Luego la hoja auxiliar se elimina.

Sub resumen()
'x Elsamatilde
'se crea una hoja nueva para guardar el resumen a partir de fila 2 y luego exportarlo
Sheets.Add
ActiveSheet.Name = "Resumen"
x = 2
dato = 1     'ajustar el dato a filtrar
'se recorren las hojas mirando la col A
For Each sh In Sheets
    'se omite la hoja nueva
    If sh.Name <> "Resumen" Then
        sh.Select
        [A7].Select       'ajustar fila inicial
        While Range("B" & ActiveCell.Row) <> ""   'ajustar letra de col 'PAInt'
            If ActiveCell = dato Then
                Range("A" & ActiveCell.Row & ":F" & ActiveCell.Row).Copy Destination:=Sheets("Resumen").Range("A" & x)
                x = x + 1
            End If
            ActiveCell.Offset(1, 0).Select
        Wend
    End If
Next sh
'al finalizar con todas las hojas se exporta la auxiliar
Sheets("Resumen").Select
ActiveSheet.Copy
'creamos un nuevo objeto Libro
Set wb = ActiveWorkbook
With wb
    'se guarda el libro en la misma carpeta
    .SaveAs ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsx"
    .Close
End With
'se elimina la hoja Resumen
Application.DisplayAlerts = False
Sheets("Resumen").Delete
Application.DisplayAlerts = True
MsgBox "Fin del proceso"
End Sub

Hola Elsa, ya lo intente, pero aveces la hoja "resumen" se queda en el libro y no la ilimina, otra cosa, en donde ingreso "1" no necesariamente tiene que ser "1", puede ser cualquier cantidad incluso letras, que debo hacer?, Muchas Gracias Elsa ya casi queda.

Imaginé que el dato no sería 1 por eso lo deje aparte, en la línea que dice 'ajustar'

dato = 1

Allí deja tu valor o tómalo desde alguna celda, por ejemplo:

dato = Rangel("F1")

Podés retirar las instrucciones a partir del comentario: 'se elimina ...

Pero atención que debes eliminarla o renombrados antes de crear la nueva... porque te dará error.

Sino deja una nueva consulta aclarando un poco más que harás con la hoja resumen, si ya la dejaras creada, etc.

Sdos!

Perdon, pero no entiendo esta parte 'dato = Rangel("F1")'. Algo más especifico si es posible, solamente voy a ingresar números pero puede ser cualquier numero.

Disculpe tantas preguntas, pero, se me ocurre que quiero también copiar los encabezados de cada hoja, y luego los datos de cada una "como lo anterior". De igual manera sera posible que cuando se copien los datos al libro nuevo estos no pierdan los margenes de columnas y filas, que se copien tal y como están las hojas originales. Gracias por su ayuda, me sera de gran utilidad.

Antes mencionaste '... en donde ingreso "1" no necesariamente tiene que ser "1", puede ser cualquier cantidad incluso letras...'

Entonces, para no tener que modificar la macro en la línea donde dice dato = 1 te sugiero que dejes esta otra:

dato = Range("F1")

Entonces, antes de ejecutar la macro colocas en esa celda el dato a buscar, letras o números... No necesariamente tiene que ser F1... la que coloques en la instrucción dato = Range(-------).

Sdos!

Perdón pero no entiendo esa parte, lo trato pero no se copia lo que yo espero que se copie, se copian todas las hojas desde la línea "7". Yo solamente necesito las líneas que contengan información en las celdas de la columna "A" de todas las hojas. Gracias!

Cree que sea posible que la Macro Busque en La columna "A" de todas las hojas y si encuentra una celda con números o letras, entonces que esa línea se copie completa de lo contrario que la ignore si es que esta vacía.

No se copian las filas que esperas porque no te decides... a veces es 1 luego pueden ser letras ... luego son solo números...;(

Entonces que solo mire si el contenido NO está vacío, con este ajuste:

While Range("B" & ActiveCell.Row) <> ""   'ajustar letra de col 'PAInt'
            If ActiveCell <> "" Then

If ActiveCell <> "" Then   significa que si no está vacía la copiará..... pero atención que un espacio (no visible) o un fórmula que devuelve "" también significa que hay datos en esa celda.

Si sucede algunas de estas situaciones x favor inicia una nueva consulta mostrando o comentando bien clarito el contenido de esa columna A.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas