Macro para crear hoja y borrar filas específicas

09/10/2006 - 22:56 por Isrrael | Informe spam
Buenas tardes a todos!
Tengo el siguiente codigo producto de una grabación de la herramienta Macro
de Excel:

Sub Creating_New_Sheet()
Sheets("Fecha ODA Oct (5)").Copy After:=Sheets(13)
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Range("A2").Select
End Sub

Lo que hace es que copia la hoja activa hacia la derecha y borra todas las
filas desde 2:2 hasta el fin. Pero esta macro no funciona para cualquier
libro. Que debo de hacer para que funcione con todo libro, es decir, crear
una hoja nueva exactamente igual, a la activa, pero borrando todos los datos
desde 2:2. Le quise reemplazar con ActiveSheet. pero algo me falta...

Y la otra ayuda, qué codigo puede "ser selectivo", es decir, que "detecte"
en la columna D una palabra en específico, y entonces borre toda la fila con
esa palabra.

Gracias anticipadas,
Isrrael

Preguntas similare

Leer las respuestas

#6 David
10/10/2006 - 01:22 | Informe spam
Interesantes tus observaciones, pero...

1)
Gracias. No había considerado esa alternativa. Y tienes razón, es mucho
más eficiente.
El único problema que veo es que podría encontrarse "BORRAR" en cualquier
columna, y no precisamente en la D... ¿Se podría hacer que la búsqueda se
limite a un rango o columna específica?

2)
¿?
Parto del supuesto que una celda vacía determina el fin del listado. Igual
podrían establecerse otros límites, pero eso correrá por cuenta de quien
consulta, o deberá volver a preguntar.



"KL" escribió:

Hola David,

1) Tu codigo pierde tiempo valioso [entre otras cosas] evaluando si la celda esta vacia y recorriendo todas las celdas en vez de ir
directamente a la siguiente ocurrencia de "BORRAR" mediante el metodo .Find

2) Ademas, si tu hipotesis es que solo puede haber 2 posibles valores en la columna [D:D] - vacio y "BORRAR", entonces (suponiendo
que no pueden existir mas de ~8100 celdas vacias no contiguas en dicha columna) no hay ninguna necesidad de usar bucles, bastaria
con lo siguiente:

On Error Resume Next
[D2:D65536].SpecialCells(xlCellTypeConstants).EntireRow.Delete

Lo cual es veces mas rapido.

Saludos,
KL


"David" wrote in message news:
> Ok. Ahora vamos con la segunda consulta. Prueba el siguiente código:
>
> Sub BorrarFilas()
> Dim Fila As Integer, Seguir As Boolean
> 'Principiaremos a analizar la hoja desde la fila 2:
> Fila = 2
> Seguir = True
> Do
> 'Se verifica si la celda está vacía. Esto indica que se ha terminado.
> If Len(Cells(Fila, 4)) = 0 Then
> Seguir = False
> Else
> 'Si la celda no está vacía, se busca la palabra BORRAR
> If Cells(Fila, 4) = "BORRAR" Then
> 'Se borra la fila y se corren los datos hacia arriba
> Range(Cells(Fila, 1), Cells(Fila, 4)).Delete shift:=xlShiftUp
> 'Como la fila fué eliminada, no se incrementa el contador de
> filas
> Else
> 'Como la fila no fue eliminada, se incrementa el contador de
> filas
> Fila = Fila + 1
> End If
> End If
> Loop While Seguir
> End Sub
>
> Comentas cómo te fue...
>
> Saludos.
>
>
>
> "Isrrael" escribió:
>
>> guau!,
>> funciona perfecto!. Mil gracias David,
>> la otra parte aun no la matizo en el cerebro.., pero tengo que resolverla...
>> Mil gracias de nuevo por tu ayuda!
>> Isrrael
>> "David" wrote in message
>> news:
>> > Para tu primera consulta:
>> >
>> > Cambia la primera línea de tu código. En su lugar, crea una variable
>> > string
>> > para luego asignarle el nombre de la hoja activa. Luego insertas la nueva
>> > hoja a la derecha de la misma:
>> >
>> > Sub Creating_New_Sheet()
>> >
>> > Dim Hoja As String
>> > Hoja = ActiveSheet.Name
>> > Sheets(Hoja).Copy After:=Sheets(Hoja)
>> >
>> > Rows("2:2").Select
>> > Range(Selection, Selection.End(xlDown)).Select
>> > Range(Selection, Selection.End(xlDown)).Select
>> > Selection.Delete Shift:=xlUp
>> > Range("A2").Select
>> > End Sub
>> >
>> >
>> >
>> >
>> > "Isrrael" escribió:
>> >
>> >> Buenas tardes a todos!
>> >> Tengo el siguiente codigo producto de una grabación de la herramienta
>> >> Macro
>> >> de Excel:
>> >>
>> >> Sub Creating_New_Sheet()
>> >> Sheets("Fecha ODA Oct (5)").Copy After:=Sheets(13)
>> >> Rows("2:2").Select
>> >> Range(Selection, Selection.End(xlDown)).Select
>> >> Range(Selection, Selection.End(xlDown)).Select
>> >> Selection.Delete Shift:=xlUp
>> >> Range("A2").Select
>> >> End Sub
>> >>
>> >> Lo que hace es que copia la hoja activa hacia la derecha y borra todas
>> >> las
>> >> filas desde 2:2 hasta el fin. Pero esta macro no funciona para cualquier
>> >> libro. Que debo de hacer para que funcione con todo libro, es decir,
>> >> crear
>> >> una hoja nueva exactamente igual, a la activa, pero borrando todos los
>> >> datos
>> >> desde 2:2. Le quise reemplazar con ActiveSheet. pero algo me falta...
>> >>
>> >> Y la otra ayuda, qué codigo puede "ser selectivo", es decir, que
>> >> "detecte"
>> >> en la columna D una palabra en específico, y entonces borre toda la fila
>> >> con
>> >> esa palabra.
>> >>
>> >> Gracias anticipadas,
>> >> Isrrael
>> >>
>> >>
>> >>
>>
>>
>>


Respuesta Responder a este mensaje
#7 KL
10/10/2006 - 02:19 | Informe spam
Hola David,

1) ... El único problema que veo es que podría encontrarse "BORRAR" en cualquier
columna, y no precisamente en la D... ¿Se podría hacer que la búsqueda se
limite a un rango o columna específica?



Asi:

[D:D].Find _
(What:="BORRAR", _
After:=[D1], _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext).EntireRow.Delete


2) Parto del supuesto que una celda vacía determina el fin del listado. Igual
podrían establecerse otros límites, pero eso correrá por cuenta de quien
consulta, o deberá volver a preguntar.



Una forma mas rapida de buscar el final de la lista (sin tener que recorrer las celdas) es por ejemplo esta:

[D65536].End(xlUp)

Saludos,
KL
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida