while not equal excel-vba operators in-operator vba excel

excel-vba - while - not equal vba



Imitando al operador “IN” (6)

¿Cómo se puede lograr:

if X in (1,2,3) then

en lugar de:

if x=1 or x=2 or x=3 then

En otras palabras, ¿cómo puede uno imitar mejor al operador IN en VBA para sobresalir?


Lo escribí ahora ...

Public Function IsInArray(FindValue As Variant, ParamArray arrEmailAttachment()) As Boolean Dim element As Variant For Each element In arrEmailAttachment If element = FindValue Then IsInArray = True Exit Function End If Next element IsInArray = False End Function


No creo que haya una solución muy elegante.

Sin embargo, puedes intentar:

If Not IsError(Application.Match(x, Array("Me", "You", "Dog", "Boo"), False)) Then

o podrías escribir tu propia función:

Function ISIN(x, StringSetElementsAsArray) ISIN = InStr(1, Join(StringSetElementsAsArray, Chr(0)), _ x, vbTextCompare) > 0 End Function Sub testIt() Dim x As String x = "Dog" MsgBox ISIN(x, Array("Me", "You", "Dog", "Boo")) End Sub


No hay ninguno que yo sepa.

Usualmente uso una función InArray () hecha en casa como la que se encuentra en freevbcode.com/ShowCode.asp?ID=1675

También puede crear una versión que itere a través de la matriz en lugar de concatenar, si eso es más apropiado para su tipo de datos.


También puedes probar la sentencia CASE en lugar de IF

Select Case X Case 1 To 3 '' Code to do something Case 4, 5, 6 '' Code to do something Case 7 '' Code to do something Case Else '' More code or do nothing End Select


has probado

eval("3 in(1,2,3,4,5)")


Método más rápido:

Este es un método mucho más rápido y compacto que cualquiera de las otras respuestas, y funciona con valores numéricos o de texto:

Function IsIn(valCheck, valList As String) As Boolean IsIn = Not InStr("," & valList & ",", "," & valCheck & ",") = 0 End Function

Ejemplos:

Utilice IsIn con un valor numérico:

Sub demo_Number() Const x = 2 If IsIn(x, "1,2,3") Then Debug.Print "Value " & x & " was Found!" Else Debug.Print "Value " & x & " was not Found." End If End Sub

Utilice IsIn con un valor de cadena:

Sub demo_Text() Const x = "Dog" If IsIn(x, "Me,You,Dog,Boo") Then Debug.Print "Value " & x & " was Found!" Else Debug.Print "Value " & x & " was not Found." End If End Sub

Comparación de velocidad:

Para comparar la velocidad, realicé la prueba de la respuesta aceptada 100,000 veces:

  • 0.406 sec (FASTEST) Esta función (usando InStr ):
  • Answer aceptada de 1.828 sec (450% slower) con la función "ISIN"
  • 1.799 sec (440% slower) Answer con el "IsInArray" de freeVBcode
  • 0.838 sec (206% slower) Answer con la función modificada "IsInArray"

No SELECT..CASE answer mucho más larga que usa SELECT..CASE ya que el objetivo del OP era presumiblemente simplificar y acortar la tarea en comparación con " if x=1 or x=2 or x=3 then ".