Hola Gregorio:
solicito tu ayuda para realizar una macro en excel, (no se nada de macros), es un libro con 5 hojas que indican el centro de trabajo(CT) y cada hoja tiene 6 columnas con datos (fecha entrega, clc, beneficiario, importe, partida, fecha recibido, observaciones) y necesito tener una ventana como formulario para primero ubicar el centro de trabajo (que es el titulo de la hoja y encabezado) o sea la hoja requerida y despues proceder a registrar los valores (que son las columnas indicadas arriba)y despues hacer clic en el boton de registrar datos, eliminar, consultar,buscar por diferentes conceptos, especialmente por beneficiario, consultar y transferir columnas seleccionadas a otra hoja por devolucion (no procede la entrega)., segun se desee se oprime un boton, (bueno asi me lo imagino).
no se si fui explicito en esto, de antemano te doy las gracias por tu tiempo, espero me puedas ayudar
saludos y nuevamente GRACIAS
DANIEL GIL
















2 users commented in " ayuda en Macros para excel "
Follow-up comment rss or Leave a TrackbackNecesito eliminar todas las filas que cumplan con una condicion establecida.
En una fila tenemos 3 columnas que tienen relacion entre si:
1 contiene valor
2 contiene valor
3 contiene valor
Si la columna 3 es diferente de 1 debe revisar que la columna 1 y 2 no tengan valor, si todo esto se cumple, debe eliminar la fila completa.
Evidentemente tendremos muchas filas que cumplan con la condicion, Como eliminar todas estas filas con macro?
Saludos
Que gusto jescobarbiz, partiendo de la macro que me enviaste por correo que es esta:
Application.ScreenUpdating = False
Dim Fin As Long
Dim X As Long
Fin = 1000
For X = 2 To Fin
If Cells(X, 17).Value “1″ And Cells(X, 16).Value = 0 And Cells(X, 15).Value = 0 Then
Cells(X, 10).EntireRow.Delete
End If
Next X
Application.ScreenUpdating = True
End Sub
Donde me comentas que solo te borra algunas.
Esto te pasa por que al eliminar una fila la siguiente toma su lugar es decir, si eliminas la fila 7, la que antes era la 8 ahora será la 7.
Es por esto que con este código no te elimina todas las filas coincidentes con las caracterÃsticas necesaras ya que si elimina la fila 7 habrÃa que evaluar de muevo la fila 7 y no la 8 como lo hace ahora el for
Por otro lado como manejas el for casi no me gusta por lo que cambiaremos también el for por un control con Goto y Contador para la fila a evaluar.
Con tu macro que evaluarÃa mil filas siguientes pero más las que no sean siguientes y que no sean vacias (“” las comillas es el valor de una celda vacia) que yo le agrego, quedarÃa asÃ:
Application.ScreenUpdating = False
Dim Fin As Long
Dim X As Long
Fin = 1000
For X = 2 To Fin
Misma_Fila:
If Cells(X, 17).Value = “” And Cells(X, 16).Value = “” And Cells(X, 15).Value = “” Then Exit Sub
If Cells(X, 17).Value “1″ And Cells(X, 16).Value = “” And Cells(X, 15).Value = “” Then
Cells(X, 1).EntireRow.Delete
GoTo Misma_Fila
End If
Next X
Application.ScreenUpdating = True
De mi parte sugiero que sea de la siguiente manera como primera opción:
Sub Eliminar()
fil = 2
Misma_Fila:
‘ Evaluamos que las celdas no sean vacias y en el caso de que lo sean se termina la rutina
If Cells(fil, 17) = “” And Cells(fil, 15) = “” And Cells(fil, 16) = “” Then Exit Sub
‘———————————————–
‘ Aquà comenzamos a evaluar las filas en la fila 2
If Cells(fil, 17) = 1 And Cells(fil, 15) = “” And Cells(fil, 16) = “” Then
‘ Si es el caso en que cumpla con las necesidades entonces
Cells(fil, 1).EntireRow.Delete
‘ La fila se elimina
GoTo Misma_Fila
‘ Y vuelve a la etiqueta 1 sin cambiar la fila que se evalúa
End If
‘Este es el contador que te comento
‘El cual controla junto con el goto la fila en la que trabajamos.
fil = fil + 1
‘———————————————–
GoTo 1
End Sub
Buenno con cualquiera de las dos forma que decidas hacerlo te funcionará ya que el error estaba en que no contabas con que la fila siguiente tomaba el lugar de la anterior una vez que se esta se elimina.
Variando la forma de hacerlo puedes tambien con el siguiente proceso como segunda opción
Un filtro en el cual:
En la columna 17 le quites la palomita a 1
En la columna 16 le pongas la palomita solo a Vacias que siempre es la última opción
En la columna 15 le pongas la palomita solo a Vacias que siempre es la última opción
Ya que tienes el filtro aplicado entonces seleccionas todas las filas sin encabezados
Ya que tienes el rango seleccionado entonces precionas Ctrl + i (Ir a)
En Ir a da clic en el botón “Especial…”
Este te llevará a un panel de opciones en el que seleccionaras Solo Celdas Visibles, puedes teclear el núimero dos
Clic en el botón Aceptar
Y obtienes la selección de las filas que vas a eliminar, si usas Excel anterior al 2007 no se puede eliminar filas enteras por lo que deberas solo suprimir.
Ya que suprimes entonces quitas el filtro
Seleccionas de nuevo el rango de datos desde la primera fila hasta la última manualmente puede ser con Ctrl + Fin
Ordenas ya sea que hayas o no seleccionado los encabezados y ya tienes los datos sin las filas que tu mismo decidiste eliminar osea las viste antes de proceder
Y pues como me es costumbre tengo una tercera opción
La cual es ordenando los datos en los tres niveles y tendras un bloque que coincida con las condiciones para ser eliminados esto de la ordenada tanbién se puede hacer con una macro te la pongo
Sub Ordenar()
Cells(2, 1).CurrentRegion.Sort _
key1:=Cells(2, 1), order1:=xlDescending, _
key2:=Cells(2, 2), order2:=xlDescending, _
key3:=Cells(2, 3), order3:=xlAscending, _
Header:=xlYes
End Sub
Ordenando de esta manera el bloque a eliminar con los datos que me proporcioné esta al final, pero esto depende de los valores capturados, pero se será solo un bloque.
Hasta pronto.