Eliminar filas entre 2 textos con macro?

Tengo en excel un archivo que me bajo de un aplicativo y en la fila A17 tengo un texto que dice "estadisticas" y necesito eliminar esas filas hasta una celda ubicada en A que tiene el texto "cantos" este espacio puede variar segun la informacion que bote el aplicativo.

Es decir siempre la palabra "estadisticas" va a estar en A17 pero la palabra "cantos" puede estar en A30 o en A50, necesito esta macro para optimizar mi tiempo.

1 Respuesta

Respuesta
1

.09/09/16

Buenas, Alonso

Aquí va la rutina que hace lo que deseas.

Nota que hay un par de variables dentro del código para que le indiques desde qué linea empezar a eliminar filas (comienza desde la inmediata siguiente) y cuál es la palabra que detiene la ejecución (asegurate de que esté escrita igual, caso contrario la rutina continuaría).

Bien, accede al Editor de VBA (Atajo: Alt + F11), inserta un módulo - si no tuvieras uno ya- y pega el siguiente código:

Sub elimfila()
IniRango = "A17"
StopWord = "cantos"
Do While Range(IniRango).Offset(1).Value <> StopWord
    Range(IniRango).Offset(1).EntireRow.Delete
    cont = cont + 1
Loop
    ElMensaje = IIf(cont = 0, "NO SE ELIMINO LINEA ALGUNA", "Cantidad eliminada: " & cont & " fila" & IIf(cont > 1, "s", ""))
    ElTitulo = "TERMINADO!"
    MsgBox ElMensaje, vbInformation, ElTitulo
    Set RangoNum = Nothing
End Sub

Coméntame si es lo que buscabas o si necesitas más apoyo con esto.

Un abrazo

Fernando (Alonso)

(Buenos Aires, Argentina)

.

¡Gracias! 

Eres muy amable, la probé y me ha funcionado a la perfección, aunque tengo otra duda si en la celda ya no me aparece solo "cantos" sino "cantos relacionados" y en el visual basic la cambio igual, ya no me funciona se queda pensando y va eliminando todo, que puedo hacer

.

Buenas,

Si dentro del código que te pasé, donde dice

StopWord = "cantos"

colocaras

StopWord = "cantos relacionados"

Debería funcionar igual.

Ahora bien, puede ser que tu aplicativo envíe los datos con espacios al final de la frase.

En tal caso, la rutina continuaría porque no encuentra exactamente esa clave.

La siguiente variante resuelve ese problema:

Sub Elimfila()
'---- Variables modificables:  
IniRango = "A17"
StopWord = "cantos relacionados"  
'---- fin Variables  
'
'---- inicio de rutina:  
Do While Trim(Range(IniRango).Offset(1).Value) <> StopWord
    Range(IniRango).Offset(1).EntireRow.Delete
    cont = cont + 1
Loop
    ElMensaje = IIf(cont = 0, "NO SE ELIMINO LINEA ALGUNA", "Cantidad eliminada: " & cont & " fila" & IIf(cont > 1, "s", ""))
    ElTitulo = "TERMINADO!"
    MsgBox ElMensaje, vbInformation, ElTitulo
End Sub

Esta otra, además, permite que la palabra clave pueda estar sola o acompañada de otras palabras. Es decir que se detendrá cuando encuentre la palabra indicada aunque no esté sola o tenga espacios.

Sub Elimfila()
'---- Variables modificables:
IniRango = "A17"
StopWord = "cantos"
'---- fin Variables
'
'---- inicio de rutina:
Do While instr(1,Trim(Range(IniRango).Offset(1).Value), StopWord) = 0
    Range(IniRango).Offset(1).EntireRow.Delete
    cont = cont + 1
Loop
    ElMensaje = IIf(cont = 0, "NO SE ELIMINO LINEA ALGUNA", "Cantidad eliminada: " & cont & " fila" & IIf(cont > 1, "s", ""))
    ElTitulo = "TERMINADO!"
    MsgBox ElMensaje, vbInformation, ElTitulo
End Sub

Prueba cualquiera de ellas y coméntame si funcionó como esperabas

Un abrazo

Fernando

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas