Excel macro borrar fila con un contenido en concreto
Necesito borrar filar que cumpla algún o algunos requisito. Por ejemplo borrar fila que contenga la palabra Domingo o domingo y lunes….
1 Respuesta
Si es posible, tanto con la herramienta Buscar y luego Eliminar o con macro.
Pero para ampliar mi respuesta necesito más información, en especial si lo quieres automatizar mediante programación.
- ¿Cómo le indicarás qué texto buscar? ¿En alguna celda o mediante un cuadro Inputbox?
- Debiera buscarlo en todas las filas y eliminar fila completa. Para esto tendrás que tener presente si la hoja tiene fórmulas que no se verán afectadas.
- ¿Cuándo mencionas 'domingo y lunes' ... es una cadena o son 2 textos diferentes que deben ser buscados?
Quedo atenta a tus aclaraciones. No olvides mencionar si la hoja estará protegida o no y si es posible que tenga autofiltros. Cuánta más información me dejes más rápido lo resolveremos. Y trata de subir una imagen con 2 o 3 filas de datos (cambialos a datos ficticios) donde se vean los encabezados.
- ¿Cómo le indicarás qué texto buscar? ¿En alguna celda o mediante un cuadro Inputbox?
MEDIANTE CUADTO
- Debiera buscarlo en todas las filas y eliminar fila completa. Para esto tendrás que tener presente si la hoja tiene fórmulas que no se verán afectadas.
EN UNA COLUMNA, ELIMINANDO LA FILA COMPLETA. NO HABRÁ FÓRMULA AFECTADA
- ¿Cuándo mencionas 'domingo y lunes' ... es una cadena o son 2 textos diferentes que deben ser buscados?
SON TEXTOS DIFERENTES
Quedo atenta a tus aclaraciones. No olvides mencionar si la hoja estará protegida o no y si es posible que tenga autofiltros.
ESTARÁ PROTEGIDA.
Cuánta más información me dejes más rápido lo resolveremos. Y trata de subir una imagen con 2 o 3 filas de datos (cambialos a datos ficticios) donde se vean los encabezados.
PERDONA, NO SE COMO SE SUBE.
MUCHISIMA GRACIAS POR SU AYUDA.
Entra al Editor de macros, inserta un módulo y allí copia la macro que dejo a continuación. Lo que hará es buscar en col A el texto ingresado. Si lo encuentra te dirá en qué fila y solicita confirmación. En caso de 'si' se eliminará la fila completa. Debes ajustar la letra de la col a buscar y tu clave de hoja.
Sub eliminaFila() 'x Elsamatilde dato = InputBox("Ingresa el texto a buscar en columna A") If dato = "" Then Exit Sub 'si cancela la ventana no se ejecuta 'se busca el dato en col A 'ajustar al modelo Set busco = ActiveSheet.Columns("A:A").Find(dato, LookIn:=xlValues, lookat:=xlPart) If Not busco Is Nothing Then 'encontró el dato sino = MsgBox("¿Confirmas eliminar la fila 4?", vbQuestion + vbYesNo, "Confirmar") If sino = vbYes Then 'desproteger- eliminar -volver a proteger ActiveSheet.Unprotect "tu_clave" Range("A" & busco.Row).EntireRow.Delete ActiveSheet.Protect "tu_clave" 'ajustar clave y opciones de protección End If End If End Sub
Pero faltaría aclarar otros 2 detalles:
- Si no habrá otras tablas de datos que no deban ser involucradas. En caso de haberlas, hay que indicar el rango a recorrer, en lugar de indicar la columna completa.
- Si el dato se puede encontrar en varias filas. Y en ese caso, si debe eliminar todas las apariciones o no.
Para dejar una imagen, presiona el primer botón de la barra de herramientas de este espacio, opción SUBIR IMAGEN te permitirá buscar en tu equipo para insertarla.
Sdos!
- Si no habrá otras tablas de datos que no deban ser involucradas. En caso de haberlas, hay que indicar el rango a recorrer, en lugar de indicar la columna completa.
el dato a buscar esta en la columna B, que seria de la fila 14 a la 105
EL DATO A BUSCAR ESTA EN LA COMUNA B, QUE SERIA DE LA FILA 14 A LA 105
- Si el dato se puede encontrar en varias filas. Y en ese caso, si debe eliminar todas las apariciones o no.
DEBE BORRAR LA FILA COMPLETA
TAMBIEN SERIA INTERESANTE PODE PONER BOTONES PARA QUE SE EJECUTARA LA MACRO. "ELIMINAR DOMINGO"; "ELIMINAR LUNES"; "ELIMINAR...
COMO SIEMPRE MUY AGRADECIDO POR SU LABO
R.
No me gusta mucho la idea de tener 7 botones para los días.
Te sugiero otra opción: una celda con lista desplegable para seleccionar el día.
En el Editor, en el objeto HOJA de trabajo, copia lo siguiente, ajustando la celda del desplegable:
Private Sub Worksheet_Change(ByVal Target As Range) 'se controla el cambio en celda F11 'AJUSTAR la celda On Error Resume Next If Target.Address = "$F$11" And Target <> "" Then Call eliminaFila(Target) End Sub
Y en un módulo la macro ajustada a la nueva situación:
Sub eliminaFila(dato) 'x Elsamatilde Dim x As Integer Dim sino, busco sino = MsgBox("¿Confirmas eliminar las filas con texto '" & dato & "'?", vbQuestion + vbYesNo, "Confirmar") If sino <> vbYes Then Exit Sub 'desproteger- eliminar -volver a proteger ActiveSheet.Unprotect "tu_clave" 'se busca el dato en rango de col B Set busco = Range("B14:B105").Find(dato, LookIn:=xlValues, lookat:=xlWhole) If Not busco Is Nothing Then 'encontró el dato x = busco.Row Do While x <= 105 If Range("B" & x) = dato Then Range("B" & x).EntireRow.Delete xlUp Else x = x + 1 End If Loop End If ActiveSheet.Protect "tu_clave" 'ajustar clave y opciones de protección End Sub
Sdos y no olvides marcar una votación para esta respuesta (buena o excelente).
Elsa
*Más ejemplos del evento Change en Hoja en video N° 46 de mi canal.
Ante todo, quiera mostrarte mis respeto y admiración, estas tratando con alguien que sabe muy poquito de excel, y no soy capaz de entender que es lo que tengo que hacer con la información que me das.
He sido capaz de hacer una lista desplegable con algunos días de la semana, los que necesito, pero no se que tengo que hacer con esto:
En el Editor, en el objeto HOJA de trabajo, copia lo siguiente, ajustando la celda del desplegable:
Private Sub Worksheet_Change(ByVal Target As Range) 'se controla el cambio en celda F11 'AJUSTAR la celda On Error Resume Next If Target.Address = "$F$11" And Target <> "" Then Call eliminaFila(Target) End Sub
El modulo de la macro, supongo que solo sara pegarlo en Desarrollador en Visual Basic, si no es asi, ruego pasos a seguir.
De nuevo disculpa por la lata que le estoy dando, pero mis conocientos no llega a más.
Perdón por mi atrevimiento, pero seria posible que le enviara el excel y ud. me lo corrigiera.
Un cordial saludo,
Si, por favor. Porque es muy cansador explicar cuando hay que realizar varios pasos ;)
Cuando coloco mi correo aquí el corrector me lo cambia, pero lo intentaré, sino buscalos en sección CONTACTOS de mi sitio que dejo al pie.
Cibersoft PUNTO arg ARROBA gmail.com
No recibí aún tu correo, y viendo que nuevamente el corrector lo modificó te lo aclaro. El texto 'cibersoft. Arg' en minúsculas, luego el arroba y luego el texto 'gmail.com'
Si, en cambio, ya pudiste adaptar los códigos a tu libro agradeceré lo comentes y cierres la consulta.
Sdos!
Si, es correcta la versión. Ahora el libro tiene extensión xlsm considerando que tiene macros. Ajusté algo la del módulo considerando la muestra real:
Sub eliminaFila(dato) 'macro para ser ejecutada desde cualquier hoja 'x Elsamatilde Dim x As Integer, y As Integer Dim sino, busco sino = MsgBox("¿Confirmas eliminar las filas con texto '" & dato & "'?", vbQuestion + vbYesNo, "Confirmar") If sino <> vbYes Then Exit Sub 'desproteger- eliminar -volver a proteger 'se busca el dato en rango de col B hasta la última fila ocupada y = Range("B" & Rows.Count).End(xlUp).Row Set busco = Range("B14:B" & y).Find(dato, LookIn:=xlValues, lookat:=xlWhole) If Not busco Is Nothing Then 'encontró el dato ActiveSheet.Unprotect "tu_clave" x = busco.Row Do While x <= y If Range("B" & x) = dato Then Range("B" & x).EntireRow.Delete xlUp Else x = x + 1 End If Loop ActiveSheet.Protect "tu_clave", DrawingObjects:=True, Contents:=True, Scenarios:=True 'ajustar clave y opciones de protección End If End Sub
Sdos!
Hola de nuevo, MUY AGRADECIDO.
FUNCIONA PERFECTAMENTE
Cuánto me costaría hacer una hoja de cálculo como le he mandado, con la siguiente modificación.
primero: que le pudiera poner para que saliera de forma automática de fecha a fecha de cualquier año y de cualquier cantidad, como la hoja enviada por ejemplo de 1 de enero al 31 de marzo de 20xx
segundo. Que la cantidad a repartir, además de aleatoria y que.no se repita, pudiera ponderarla dependiendo del día de la semana, dándole una numero por ejemplo de 1 al 9 siendo el 9 el día de reparto más alto y que las cantidades repartidas sean equivalentes es decir, que en el reparto de lunes no salga 10 y el viernes 5000, que sean cantidades homogéneas. Lunes 10 y viernes 40 dependiendo de la ponderación dada.
De nuevo muchas gracias.
lógicamente la valoración será EXCELENTE, no puede ser menos.
Entre tus aclaraciones comentabas: ESTARÁ PROTEGIDA.
Por eso la macro desprotege la hoja para poder eliminar la fila y luego la vuelve a proteger.
Si la hoja NO estará protegida debes inhabilitar (colocando una comilla delante) o directamente borrar las instrucciones que mencionan: ActiveSheet. Unprotect y ActiveSheet. Protect.
O puedes protegerla tildando la opción 'Eliminar filas' ... y en ese caso si bien tu hoja estará protegida en general, te permitirá eliminar filas, tanto éstas de la macro como cualquier otra. Y tampoco, en este caso', necesitas esas 2 instrucciones.
Con respecto a tu consulta de realizar otra hoja de cálculo, te comento:
- Este sitio es gratuito para todos (ni se cobra ni se abonan las consultas)
- Debes iniciar una nueva consulta (luego de finalizada ésta), con todas las aclaraciones (referencias de hojas y ubicación de los datos), si es posible con imagenes de lo que tienes y lo que quieres obtener.
- Si deseas asistencia privada para evitar el paso anterior y la consabida demora (con la consulta actual ya llevamos 1 semana ;) puedes enviarme la solicituda a mi correo.
- También los usuarios pueden crear una consulta (y de hecho muchas veces lo han hecho) solicitando algún experto para realizar algún trabajo privado y de pago.
Sdos.!
- Compartir respuesta