Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Eliminar filas si cumplen una condición

1,241 views
Skip to first unread message

Carlos

unread,
Dec 11, 2007, 8:43:56 AM12/11/07
to
Hola a todos,

Quisiera saber cómo se podrían eliminar filas si una de las celdas
integradas en ella cumple una condición.

Otra pregunta: por qué el formato condicional no te deja introducir
condiciones relativas a otras pestañas. Se resuelve esto en el 2007?
(lo tuve que eliminar por su falta de funcionalidad).

Saludos.

Ivan

unread,
Dec 11, 2007, 3:47:11 PM12/11/07
to
hola Carlos

> Quisiera saber cómo se podrían eliminar filas si una de las celdas
> integradas en ella cumple una condición.

para tu 1ª duda si quieres prueba algo parecido a esto (adaptado a tus
condicciones reales)

para el ej:

la 1ª columna es la A y se supone que tambien es la mas larga (o igual
a la mas larga) o al menos que en la ultima fila tiene datos

la condicion iria en cualquier celda de la columna 2 y en este caso es
que ponga 'Eliminar'

copia/pega este codigo en un modulo normal del editor de VBA (Alt+F11
=> insertar => modulo a secas)

Sub EliminarFilas()
Dim f As Integer
Application.ScreenUpdating = False
For f = [a65536].End(xlUp).Row To 1 Step -1
If Cells(f, 2) = "Eliminar" Then Rows(f).Delete
Next
End Sub

como te digo seria para adaptarlo

en cuanto a la 2ª duda espero que alguien te lo aclare, porque yo no
lo se

espero te ayude

un saludo
Ivan

Carlos

unread,
Jan 17, 2008, 6:37:37 PM1/17/08
to
Hola Iván, perdona que no te haya contestado, pero no miré hasta hoy.
El caso es que acabo de probar...y me funciona perfectamente!

Muchas gracias.

Ivan

unread,
Jan 17, 2008, 9:15:32 PM1/17/08
to
hola Carlos

me alegro de que, aunque tarde, te haya servido.

de todas formas, si fuesen muchos registros, creo que hay formas mas
eficientes/rapidas de hacerlo

pej. con filtros avanzados, esta seria una forma, que ademas te
permite 'comodamente' elegir el campo y el dato para el criterio
(pasandole los adecuados en los argumentos del procedimiento. Echale
un ojo a los comentarios que preceden a la macro)

Requisitos:

a) las columnas IU:IV deben estar vacias (o mejor dicho, no debe
importarte lo que pudiesen contener, pues se borrara)

b) la lista debe de contener fila de titulos

c) debe empezar en A1 y los datos en A2 (esto podria modificarse)

pega los codigos en un modulo normal

''------------pega desde aqui ---------------------------------
'
'---- Ref = la referencia de la 2ª celda de la columna
' en la que esta el criterio (Ej: "B2")
'---- Criterio = el dato por el que se elimnaran las filas.
' Puedes pasarle una celda (su contenido)
'----- Tambien podrias poner otro operador en la parte que
' carga la formula en la celda, pej. sustituyendo '<>' por '='
'
Sub EliminarFilas(Ref As String, Criterio As Variant)
Dim nC As Integer, rangos As String, rng As Range
[iv:iv].Clear
If IsDate(Criterio) Then
Criterio = CLng(CDate(Criterio))
ElseIf IsNumeric(Criterio) Then
Else
Criterio = """" & Criterio & """"
End If
Application.ScreenUpdating = False
With ActiveSheet
If .FilterMode Then .ShowAllData
Set rng = .[a1].CurrentRegion
nC = rng.Columns.Count
.[iv2].Formula = "=(" & Ref & "<>" & Criterio & ")"
.Parent.Worksheets.Add Before:=rng.Parent
End With
With rng
.AdvancedFilter action:=xlFilterCopy, _
CriteriaRange:=.Parent.[iv1:iv2], _
CopyToRange:=Range(Cells(1), Cells(1, nC))
If .Parent.FilterMode Then .Parent.ShowAllData
[a1].CurrentRegion.EntireColumn.Copy .Cells(1)
End With
Set rng = Nothing
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
[iv1:iv2].Clear
End Sub
'----------------------------------------------------

y para llamarla pej. algo asi

'------------------------------------------------------
Sub pruebaTest2()

EliminarFilas "c2", 9

'' o asi para un texto (esta como comentario)

' EliminarFilas "c2", "Eliminar"

End Sub
'-------------------------------------


bueno, solo por hacerla mas versatil y rapida

un saludo
Ivan

0 new messages