Recibí el día de hoy esta consulta por mail: como hacer, mediante macros, que se eliminen registros de una tabla. La macro le deberá solicitar al usuario el dato, buscar y borrar dicho registro.
Voy a mostrar dos ejemplos de como hacerlo: utilizando el método Find de VBA y otro con un bucle. Al primero lo recomiendo cuando necesitemos eliminar un solo dato, al segundo, cuando existan varios registros a eliminar.
[+/-] Ver el resto / Ocultar
Entonces: tenemos la siguiente tabla:
Solo resta agregar que, en lugar de eliminar toda la fila, podríamos "vaciar" su contenido, reemplazando:
Si optamos por "vaciar" no deberemos incluir dentro del bucle la linea: UltFila = UltFila - 1, ya que la cantidad de celdas del rango a recorrer no se ve alterada. (ya que no eliminamos la fila)
Voy a mostrar dos ejemplos de como hacerlo: utilizando el método Find de VBA y otro con un bucle. Al primero lo recomiendo cuando necesitemos eliminar un solo dato, al segundo, cuando existan varios registros a eliminar.
[+/-] Ver el resto / Ocultar
Entonces: tenemos la siguiente tabla:
En el código que veremos a continuación, le solicitaremos a nuestros usuarios que ingresen un valor del campo "código", luego lo buscaremos a lo largo de la columna B y, de estar, lo eliminaremos.
1) Método Find: este es el que utiliza Excel para buscar, cuando vamos al menú Edición / Buscar. Si a este método lo ejecutamos y el valor NO está, arroja un error. Esto es conveniente saberlo de antemano, así colocamos un capturador de errores y procedemos en consecuencia.
Aquí les dejo el código bien comentado:
Sub ELIMINA()Dim MENSAJE As Variant Dim Fila As Long 'solicitamos al usuario el dato que desea eliminar: MENSAJE = Trim(InputBox("Ingrese el codigo del registro a eliminar")) 'nos vamos a la hoja en donde tenemos la tabla: Sheets("CONCEPTOS").Activate If MENSAJE = "" Then 'si el usuario no ingresó ningún valor, salgo: Exit Sub ElseIf MsgBox("Desea Eliminar el Registro: " & MENSAJE, vbInformation + vbYesNo, "Sistema") = vbYes Then 'selecciono la columna B On Error Resume Next Columns("B:B").Select 'utilizo el metodo Find de excel para buscar el registro. Si existe, 'almacenará el numero de fila en la que se encuentra en la variable Fila Fila = Selection.Find(What:=MENSAJE, After:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Row If Err.Number = 0 Then 'si NO hay errores, entonces elimino el registro. Cells(Fila, 1).EntireRow.Delete 'aviso a la hora que fué eliminado: MsgBox "El registro " & MENSAJE & " fué correctamente eliminado a las " & Now, vbInformation [b1].Select Else MsgBox "El valor: " & MENSAJE & " no existe", vbExclamation, "Atención" Exit Sub End If End If End Sub
el código arriba descripto nos arroja el siguiente resultado:
si presionamos "aceptar", el registro (toda la fila) que contiene 20101013 será eliminado
Ahora analicemos dos argumentos del método Find arriba utilizado: LookIn y LookAt
LookIn:= con xlValues le indicamos que busque valores. con xlFormulas, que busque dentro de las funciones que puedan estar presentes en la hoja.
LookAt:= xlWhole: que busque la frase exacta, completa. con xlPart busca "por partes", es decir, encontrará la palabra "ferrocarril" si solo ingreso "ferro". ¿se entiende?
Ambos parámetros deberán ser modificados de acuerdo a las necesidades de nuestro proyecto.
2) Con bucle:
Sub ELIMINA_CON_BUCLE() Dim MENSAJE As Variant Dim Fila As Long Dim UltFila As Long Dim Cont As Long 'solicitamos al usuario el dato que desea eliminar: MENSAJE = Trim(InputBox("Ingrese el codigo del registro a eliminar")) 'nos vamos a la hoja en donde tenemos la tabla: Sheets("CONCEPTOS").Activate Cont = 0 If MENSAJE = "" Then 'si el usuario no ingresó ningún valor, salgo: Exit Sub ElseIf MsgBox("Desea Eliminar el Registro: " & MENSAJE, vbInformation + vbYesNo, "Sistema") = vbYes Then 'guardo en una variable la ultima fila ocupada de la tabla, en la columna B UltFila = Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row 'ahora recorro todas las celdas desde la segunda fila hasta la ultima: For Fila = 2 To UltFila If Trim(Cells(Fila, 2).Value) = MENSAJE Then 'si el valor coincide, elimino: Cells(Fila, 2).EntireRow.Delete 'y le resto 1, ya que el rango a recorrer se vió disminuido UltFila = UltFila - 1 'sumo uno a Cont, para al final avisar si se eliminaron registros: Cont = Cont + 1 End If Next Fila End If 'si Cont es mayor a cero, entonces se eliminaron registros: If Cont > 0 Then MsgBox "Se procedió a la eliminación de " & Cont & " registro/s", vbInformation Else MsgBox "No se encontraron valores para eliminar", vbExclamation End If End Sub
Solo resta agregar que, en lugar de eliminar toda la fila, podríamos "vaciar" su contenido, reemplazando:
Cells(fila, columna).entirerow.delete
porCells(fila, columna).entirerow.clearcontents
Si optamos por "vaciar" no deberemos incluir dentro del bucle la linea: UltFila = UltFila - 1, ya que la cantidad de celdas del rango a recorrer no se ve alterada. (ya que no eliminamos la fila)
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Necesito una macro que busque de acuerdo con un valor, vaya y busque en otra columna ese valor y nos de como resultado el nombre del mismo.
ResponderEliminarEjemplo
Colum A Colum B
5 Café
9 Pan
11 Azucar
14 Galletas
... ...
Si yo tengo los números 5, 9 , 11, 14, etc en una columna, al correr la Macro, de acuerdo con esalista de numeros que yo tenga vaya y busque los nombres que le corresponden a cada uno de los números y el resultado me lo ponga en una columna distinta.
si, es totalmente factible de realizar, tanto con macros como también con la función BUSCARV().
ResponderEliminaren un rato preparo un post al respecto y te dejo el ejemplo.
bueno, te dejo el link a la entrada que realicé con tu consulta. al final encontrarás el vínculo que te llevará a la descarga del archivo con el ejemplo.
ResponderEliminarcualquier cosa me avisás.
http://damianexcel.blogspot.com/2010/09/buscar-valores-con-macros.html
POR FAVOR, NECESITO SABER COMO SE PUDE CAMBIAR EL COLOR DE UNA CELDA AUTOMÁTICAMENTE, AL CUMPLIRSE UNA CONDICIÓN.
ResponderEliminarGRACIAS DE ANTEMANO
en el blog hay tres entradas básicas sobre formatos condicionales:
ResponderEliminarhttp://damianexcel.blogspot.com/2010/02/formato-condicional.html
http://damianexcel.blogspot.com/2010/02/formato-condicional-ii.html
también hay otras, pero mas complejas. fijate si alguna de esas te sirve. si necesitas ampliar los conceptos o bien algo mas puntual en tu proyecto, avísame que lo armamos.
gracias x tu mensaje e interés en mi blog.
http://damianexcel.blogspot.com/2010/02/formato-condicional-iii.html
Tengo una lista de fechas como
ResponderEliminar01-APR-1976
01-APR-1979
01-APR-1979
01-APR-1980
01-APR-1981
01-APR-1982
01-APR-1982
01-APR-1983
Como puedo eliminar el año sin tener q hacerlo manuelamente y sin tener q editar el formato de la celda ? graicas
supongamos que a esa lista de fechas la tenés en la columna A... entonces te pregunto: ¿vos necesitas eliminar el año en la propia celda (a1,a2,a3. etc) o que te aparezca la fecha sin el año en otra celda (b1, b2, b3, etc), manteniendo los datos originales en la columna A?
ResponderEliminarNecesito un macro que me permita buscar un valor en una columna y si es encontrado eliminar la fila en la que se encuentra.
ResponderEliminarAnónimo: copia y pega esto en un módulo VBA:
ResponderEliminarSub EliminarFila()
Dim Dato, Fila
Dato = InputBox("Ingrese el valor a eliminar")
If Dato <> "" Then
Set Fila = Range("a1:a1000").Find(what:=Dato)
If Not Fila Is Nothing Then
Cells(Fila.Row, 1).EntireRow.Delete
Else
MsgBox "el valor: " & Dato & " no existe"
End If
End If
Set Fila = Nothing
End Sub
cuando ejecutes la macro te aparecerá un inputbox solicitando el dato que deseas eliminar. Lo busca y si lo encuentra, elimina toda la fila. Fíjate que coloqué el rango "A1:A1000" para la búsqueda, modificalo por el que necesites en tu proyecto.
Si el valor ingresado no existe, te avisa.
suerte y cualquier cosa me avisas.
que tal experto poseo dos listbox en un formulario que son un recetario en listbox1 estan los nombres de las recetas selecciono una receta y en lisbox2 aparecen todos los ingredientes lo que deseo es cuando quiera borrar la receta del lisbox1 me borre todos los datos del lisbox2 cabe anotar que los datos son visualizados en los listbox por medio de filtro por favor nesesitio su ayuda ya que solo he logrado borrar la receta pero no me borra los ingredientes de manera automatica cuando borro la receta de la base de datos de excel gracias....
ResponderEliminarRoberto: necesitaría ver que código utilizas para llevar a cabo esas acciones, ya que depende de eso la solución que pueda brindarte. No me resulta posible darte una solución de esta forma, por que no se como está trabajando tu archivo.
ResponderEliminarPor otra parte: si se borra la receta y sus ingredientes de los listbox's .... ¿también debe borrarse de Excel?