Excel VBA: eliminar filas que no contienen...
Resuelto
Eaheru
Mensajes publicados
205
Estado
Miembro
-
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.
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
-
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 obligatoriaOption 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) -
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) -
-
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? -
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 :) -
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! :) -
Macro rectificada teniendo en cuenta sus propuestas.
¡Funciona de maravilla!