OR dentro de un IF en excel con vba

De que manera puedo especificar un OR en una sentencia IF como en C/C++ , ejemplo:
If variable=5 | variable2= 10
En una macro en excel como puedo indicar el OR como en ese caso.
Mi macro es la siguiente:
Sub Macro1()
Dim r As Range
Dim f As Long
f = Application.WorksheetFunction.CountA(Range("A:A"))
If f = 0 Then Exit Sub
For Each r In Range("A1" & ":" & "A" & f)
mensaje = ActiveCell.Text
valor = Len(mensaje)
final = mensaje
final2 = Mid(final, "1", "9")
If final2 = "1" (aqui quiero poner el OR)InStr(1, UCase(r), "ID", vbTextCompare) = 0 Then
ActiveCell.Offset(1, 0).Select
Else
Selection.EntireRow.Delete
End If
Next
Set r = Nothing
End Sub
Solo es una macro que me elimina filas a partir de cada registro en la columna A, quiero conservar unicamente registros que comiencen con 9 o contengan la cadena "id"

1 respuesta

Respuesta
1
El OR se utiliza tal como lo colocaste en la instrucción... el tema es que tu macro tenía muchos defectos y por eso los errores.
Te cambié el bucle porque el For Each ... in Range no es el bucle adecuado para cuando eliminás celdas.
También para dejar más clara la comparación coloqué en 1 variable el resultado del Instr pero luego lo podes volver a colocar dentro de la comparación, lo mismo la parte de la variable final2
Sub Macro1()
'x Elsamatilde
Dim Final As String, resulta As String
Dim final2 As Byte
Dim f As Long
'establezco la última celda con datos en col A
f = Range("A65536").End(xlUp).Row
'empiezo en A1 y recorro col hasta el fin de rgo
Range("A1").Select
While ActiveCell.Row <= f
Final = ActiveCell.Text
'guardo el primer caracter de la celda y el resultado de evaluar si existe ID
final2 = Val(Left(Final, 1))
resulta = InStr(1, UCase(ActiveCell), "ID", vbTextCompare)
'controlo condiciones
If final2 = 9 Or resulta > 0 Then
ActiveCell.Offset(1, 0).Select
Else
Selection.EntireRow.Delete
'resto 1 a la varible finrgo xque se eliminó 1 fila
f = f - 1
End If
Wend
End Sub
Pruébala y comentame si resolvió tu consulta. También te recomiendo la sección Manuales de mi sitio si te vas a dedicar a programar con VBA
Hola Muchísimas De Antemano por las correcciones, la macro que genero funciona muy bien, logra dejar las filas que comienzan con 9 y funciona bien, solo que hay un pequeño problema, cuando mi columna se encuentra de la siguiente forma la macro ya no trabaja correctamente, ¿debo corregir algunos parámetros en el Or?
9364
Ropero
NoID
Colchón
926454
No id
Zapato
926354
Es un ejemplo de algunos registros de mi columna, entonces lo que deseo es unicamente conservar las filas que comiencen con 9 o que tengan el "id" o "ID", en este ejemplo de registros es cuando la macro ya no trabaja ¿tengo qué modificar algo en especifico?
Muchas Gracias
Hola de nuevo! Mi propuesta es la siguiente, modificar en
resulta = InStr(1, UCase(ActiveCell), "ID", vbTextCompare)
La posición en la que se encontrara "id" o "ID" dentro de la celda, ¿el espacio contaría como una posición?
Bueno no soy tan bueno en esto de la programación de macros solo eso se me ha ocurrido-
Saludos y ya me puse a consultar sus manuales! La web esta genial!
Pasare el link! La verdad es muy buena!
Muchas Gracias.
Solo tenés que modificar la declaración de la variable 'resulta' que por error la dejé como string y debe ser Integer
Sub Macro1()
'x Elsamatilde
Dim Final As String
Dim resulta As Integer 'podría ser byte pero desconozco la long que pueda tomar el texto de la celda. mejor lo dejamos en Integer

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas