Excel VBA: eliminar filas que no contienen...

Resuelto
Eaheru Mensajes publicados 205 Estado Miembro -  
Eaheru Mensajes publicados 205 Estado Miembro -
Hola,

Estoy redactando una macro VBA destinada a eliminar las filas que no contengan ciertos caracteres en una columna dada.
El objetivo es examinar las filas de la columna "BI" desde la fila 3000 hasta la fila 2
y si el valor que se encuentra allí no incluye las cadenas de caracteres siguientes: "PROD" o "REC", eliminar la fila.

Por lo tanto, estoy en esta macro:
Sub supresión()

Dim z$, i&, k&
k = Cells(3000, 61).Row
For i = k To 2 Step -1
z = Cells(i, 1).Value
If Not (Cells(i, 61) Like ("PROD*" Or "REC*") ) Then Rows(i).Delete
Next
ActiveWorkbook.Save
End Sub

Y ahí, no funciona. La macro funciona muy bien si solo tengo uno de los 2 valores de referencia (PROD o REC) pero no veo cómo pedirle una referencia múltiple (los términos de la macro aquí en negrita la hacen fallar).
Obtengo el mensaje "error de sintaxis"

¿Alguien podría ayudarme a solucionar esta macro, por favor?
Gracias de antemano por su ayuda.

7 respuestas

  1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Mejor, pero no has tenido en cuenta el comentario de bacus13..
    y para Opción comparar texto está TODO EN LA PARTE SUPERIOR DEL MÓDULO
    Y dado que no has puesto Opción Explícita no ves el error de declaración...
    z NO ES IGUAL a z$
    para usar z$ debes escribir z$ = Cells(i, 61).Value
    o bien dim z as String, entonces z = Cells(i, 61).Value, está bien
    También acostúmbrate a poner Opción explícita en todos tus módulos.
    Más fácil..en el editor de VBA >> Herramientas >> opciones >> marcar >> Declaración de variables obligatoria
    Option Explicit Option Compare Text Sub suppression() Dim z as String For i = 3000 To 2 Step -1 z = Cells(i, 61).Value If Not (Cells(i, 61) Like ("PROD*") Or Cells(i, 61) Like ("REC*")) Then Rows(i).Delete Next ActiveWorkbook.Save End Sub

    --
    La experiencia instruye más seguro que el consejo. (André Gide)
    Si te das un golpe con una olla y suena hueco, no es necesariamente la olla la que está vacía. ;-)(Confucio)
    1
  2. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    ¿Dónde se encuentran las expresiones PROD o REC en la etiqueta de la celda?
    A+
    Editar:
    Debes agregar Option Compare Text en la parte superior del módulo, si no lo has hecho.
    y tu fórmula debería ser...
    If Not (Cells(i, 61) Like ("PROD*") Or Cells(i, 61) Like ("REC*")) Then Rows(i).Delete 


    La experiencia enseña más seguramente que el consejo. (André Gide)
    Si te golpeas contra una maceta y suena hueco, no necesariamente es la maceta la que está vacía. ;-)(Confucio)
    0
  3. Eaheru Mensajes publicados 205 Estado Miembro 20
     

    PROD
    RECON
    RECIA
    0
    1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
       
      ver modificaciones en el puesto anterior
      0
  4. bacus13 Mensajes publicados 30 Estado Miembro 8
     
    nada que ver, pero ¿por qué hacer k = Cells(3000, 61).Row y no k = 3000?
    ¿o incluso For i = 3000 to 2 Step -1?
    0
  5. Eaheru Mensajes publicados 205 Estado Miembro 20
     
    Hola y gracias por esta respuesta.
    Así que funciona perfectamente, aunque no he podido agregar la opción: "Option Compare Text" en mi macro;
    Recibo el mensaje: "Instrucción incorrecta en un procedimiento"

    A pesar de este detalle, la rutina funciona muy bien de la siguiente manera:

    Sub suppression()

    Dim z$, i&, k&
    k = Cells(3000, 61).Row
    For i = k To 2 Step -1
    z = Cells(i, 61).Value
    If Not (Cells(i, 61) Like ("PROD*") Or Cells(i, 61) Like ("REC*")) Then Rows(i).Delete
    Next
    ActiveWorkbook.Save
    End Sub

    Gracias por tu ayuda :)
    0
  6. Eaheru Mensajes publicados 205 Estado Miembro 20
     
    Ah ok, veo el error.
    Voy a corregir eso mañana por la mañana.

    Gracias a ti y a Bacus (Lo siento, no había visto el mensaje de Bacus).
    ¡Vuestra ayuda me ha sido muy valiosa! :)
    0
  7. Eaheru Mensajes publicados 205 Estado Miembro 20
     
    Macro rectificada teniendo en cuenta sus propuestas.
    ¡Funciona de maravilla!
    0