macro elimine filas con datos en dos columnas

10 envíos / 0 nuevos
Último envío
pepa
Imagen de pepa
Offline
última acción: Hace 1 año 2 meses
alta: 22/12/2016 - 12:19
Puntos: 295
macro elimine filas con datos en dos columnas

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

BCDFECHA
aaaaNO 500,0000/01/1900
bbbbbNO 0,0000/01/1900
ccccNO 0,0000/01/1900
ddddNO 0,0000/01/1900
eeeePUEDE500,000,0000/01/1900
ffffNO 0,0000/01/1900
ggggNO 0,0000/01/1900
hhhhhNO 0,0000/01/1900

 

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Pues es sencillo. Hazte una

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

pepa
Imagen de pepa
Offline
última acción: Hace 1 año 2 meses
alta: 22/12/2016 - 12:19
Puntos: 295
muchas gracias por contestar

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

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Es fallo mío. Olvidé cerrar

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.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
A ver, he depurado un poco el

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

pepa
Imagen de pepa
Offline
última acción: Hace 1 año 2 meses
alta: 22/12/2016 - 12:19
Puntos: 295
Muchas gracias Cron, pero

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

  PRESTARECIBEFECHA
     
 EPUEDE 0,0000/01/1900
FNO 200,0000/01/1900
GNO 0,0000/01/1900
NO 0,0000/01/1900
INO 0,0000/01/1900
JNO 500,0000/01/1900
KPUEDE 0,0000/01/1900
LNO 0,0000/01/1900
MPUEDE700,000,0000/01/1900

Perdona mi torpeza, y si soy muy pesada dejalo y seguire haciendolo manualmente como hasta ahora.

y muchisimas gracias por tu interes en ayudarme

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
No eres pesada. En el peor de

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

pepa
Imagen de pepa
Offline
última acción: Hace 1 año 2 meses
alta: 22/12/2016 - 12:19
Puntos: 295
Hola de nuevo Cron, aqui te

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.

 

 

AdjuntoTamaño
File prueba_-.xlsm20.69 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Te adjunto el archivo con la

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

AdjuntoTamaño
File prueba_-.xlsm20.58 KB
pepa
Imagen de pepa
Offline
última acción: Hace 1 año 2 meses
alta: 22/12/2016 - 12:19
Puntos: 295
Muchisimas gracias por tu

Muchisimas gracias por tu ayuda!!!. 

ya  funciona perfectamente