Hola soy nueva en esto y no se si es por aqui por donde tengo que preguntar pero bueno ahi va.
Todos los dias tengo que eliminar del cuadro de abajo las lineas en las que la columna C este vacia, pero que a su vez la columna D sea 0. Aqui he puesto un ejemplo, pero la hoja real tiene como 32 lineas diariamente y necesitaria encontrar una macro que simplifique el proceso.
Muchas garcias de antemano
A | B | C | D | FECHA |
aaaa | NO | 500,00 | 00/01/1900 | |
bbbbb | NO | 0,00 | 00/01/1900 | |
cccc | NO | 0,00 | 00/01/1900 | |
dddd | NO | 0,00 | 00/01/1900 | |
eeee | PUEDE | 500,00 | 0,00 | 00/01/1900 |
ffff | NO | 0,00 | 00/01/1900 | |
gggg | NO | 0,00 | 00/01/1900 | |
hhhhh | NO | 0,00 | 00/01/1900 |
Pues es sencillo. Hazte una macro que se recorra las celdas y que compruebe que el valor de C = "" y el de D = 0
Algo así como:
CeldaA = cells(1,1).value
cont = 1
do while CeldaA <> ""
If cells(cont,3) = "" then
If cells(cont,4) = 0 then
cells(cont,1).entirerow.delete
end if
else
cont = cont + 1
CeldA = cells(cont,1).value
end if
No lo he probado en Excel, pero salvo error, debería funcionar
Un saludo
muchas gracias por contestar y ademas tan rapido.
lo he probado pero me sale esto:
error de compilacion:
do sin loop
He pegado las instrucciones tal y como tu me detallas, pero como llevo muy poco tiempo trabajando con macros no se si he hecho algo mal. si no es mucha molestia, podrias mirar el error a ver si consigo que funcione.
Perdonarme si algo no lo hago bien, pero es la primera vez que me registro en un foro y tampoco tengo mucha idea de como funciona esto
de nuevo muchas gracias.
Sub Eliminar_filas_vacias_con_dos_condiciones()
CeldaA = Cells(1, 1).Value
cont = 1
Do While CeldaA <> ""
If Cells(cont, 3) = "" Then
If Cells(cont, 4) = 0 Then
Cells(cont, 1).EntireRow.Delete
End If
Else
cont = cont + 1
CeldA = Cells(cont, 1).Value
End If
End Sub
Es fallo mío. Olvidé cerrar el Do While...
Simplemente escribe
Loop
Antes de End Sub y debería funcionar.
Un saludo
Edito: He probado, pero se queda en bucle infinito. Corrijo en unos minutos.
A ver, he depurado un poco el código, porque hacía cosas mal.
Por un lado el bloque "else" solo entraba en la columna C había algo, pero no entraba cuando no había nada, aunque en la columna D hubiera valor. He juntado ambas condiciones en un solo If.
Además, faltaba el Loop final, como te cantaba el error del depurador. Había un tercer error: la variable se llama CeldaA, no CeldA, por lo que también fallaba por ahí.
Con todo esto, el código depurado es este:
Sub Botón1_Haga_clic_en()
CeldaA = Cells(1, 1).Value
cont = 1
Do While CeldaA <> ""
If Cells(cont, 3) = "" And Cells(cont, 4) = 0 Then
Cells(cont, 1).EntireRow.Delete
Else
cont = cont + 1
CeldaA = Cells(cont, 1).Value
End If
Loop
End Sub
Nota: Al principio del código se le da un valor a "cont" de 1. Si pones 5 en vez de 1 (por ejemplo), la función empezará desde la fila 5 (por si tienes encabezados o cosas así)
Un saludo
Muchas gracias Cron, pero sigue sin funcionar, no da errores pero no funciona. Puede ser porque tengo Excell 2016.
He cambiado el valor de "cont" porque efectivamente la funcion tiene que empezar el la fila 3. Tambien he cambiado el contenido de la celda 3 y el de la celda 4 porque su enuciado es PRESTA y RECIBE. Al lado se Sub he puesto el nombre de la hoja que se llama PRESTAMOS, quedando asi:
Sub PRESTAMOS()
CeldaA = Cells(1, 1).Value
cont = 3
Do While CeldaA <> ""
If Cells(cont, PRESTA) = "" And Cells(cont, RECIBE) = 0 Then
Cells(cont, 1).EntireRow.Delete
Else
cont = cont + 1
CeldaA = Cells(cont, 1).Value
End If
Loop
End Sub
la la hoja PRESTAMOS simplificada claro seria esta
Perdona mi torpeza, y si soy muy pesada dejalo y seguire haciendolo manualmente como hasta ahora.
y muchisimas gracias por tu interes en ayudarme
No eres pesada. En el peor de los casos, sube aquí el archivo (por supuesto con datos falsos) y lo intentamos arreglar ahí mismo.
Veo un par de cosas o tres.
1- ¿tus datos empiezan en la fila 3? Quiero decir, en el último ejemplo, el valor "E" de la primera columna está en la celda "A3"?
2- ¿La función "Sub PRESTAMOS()" cómo se lanza? ¿Tienes capturado algún evento? ¿Lo tienes asignado a algún botón?
3- La función Cells() solo funciona con números. No le puedes poner el nombre que le has dado a la columna. Los dos parámetros que acepta son el número de fila y el número de columna. Como las columnas las vemos en Excel como letras (A, B, C...), en esta función se corresponden con los números (A=1, B=2, C=3, etc.)
Por lo tanto, si la columna PRESTA es la columna C, entonces debes mantener
If Cells(cont, 3) = "" And Cells(cont, 4) = 0 Then
Un saludo
Hola de nuevo Cron, aqui te subo el fichero.
Los datos empiezan en la fila tres y cada dia mediante una macro se traspasan los datos de otra hoja a esa hoja de prestamos.
Lo que hace esa macro es insetar un numero determinado de lineas desplazando las ya existentes hacia abajo y copiar en ellas los datos del dia, por lo que los datos nuevos siempre comienzan por la fila 3
en cuanto a la funcion sub es porque tengo preparado un boton para asignarlo a la macro.
De nuevo muchisimas gracias por ayudarme y Felices Fiestas.
Te adjunto el archivo con la macro grabada. Le he hecho un pequeño cambio para adaptarlo a tu archivo. Y tenía un error para detectar el fin del bucle. En algunos casos continuaba como bucle infinito. Ambas cosas están corregidas.
Además, he puesto la macro dentro de PRESTAMOS. He comentado todo lo anterior porque como has eliminado pestañas, me iba a dar error al ejecutarlo. Tú puedes descomentarlo cuando lo vuelques a tu archivo original.
Un saludo
Muchisimas gracias por tu ayuda!!!.
ya funciona perfectamente