source

"IN" 연산자 모방

ittop 2023. 4. 22. 10:28
반응형

"IN" 연산자 모방

다음을 실현하는 방법:

if X in (1,2,3) then

다음 대신:

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

바꿔 말하면, 어떻게 하면 가장 잘 모방할 수 있을까?INVBA의 오퍼레이터가 엑셀을 취득할 수 있습니까?

나는 매우 우아한 해결책은 없다고 생각한다.

단, 다음과 같은 방법이 있습니다.

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

또는 자신의 함수를 작성할 수도 있습니다.

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

또한 IF 대신 CASE 을 사용해 볼 수도 있습니다.

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

가장 빠른 방법:

다음은 다른 답변보다 훨씬 빠르고 간결하며 숫자 또는 텍스트 값으로 작동합니다.

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

예:

사용하다IsIn숫자 값 포함:

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

사용하다IsIn문자열 값:

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

속도 비교:

속도를 비교하기 위해 승인된 답변에서 테스트를 100,000번 실행했습니다.

  • 0.406 sec (FASTEST) 기능(InStr 사용):
  • 1.828 sec (450% slower)'ISIN' 기능을 사용한 응답 승인
  • 1.799 sec (440% slower) freeVBcode의 "IsInArray"를 사용하여 답변
  • 0.838 sec (206% slower) 수정된 "IsInArray" 기능으로 응답

더 긴 은 넣지 않았습니다.SELECT..CASEOP의 목표는 아마도 작업을 단순화하고 단축하는 이었기 때문이다.if x=1 or x=2 or x=3 then".

해보셨어요?

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

제가 알기로는 없어요.

저는 보통 http://www.freevbcode.com/ShowCode.asp?ID=1675과 같은 집에서 만든 InArray() 함수를 사용합니다.

데이터 유형에 더 적합한 경우 연결하지 않고 어레이를 통해 반복되는 버전을 만들 수도 있습니다.

자신의 기능을 쓰지 않으면 작동하지 않습니다.@Kredns에 의해 받아들여진 솔루션은 문자열에 의해 강제되기 때문에 모든 유형의 오브젝트에 대해 예상대로 동작하지 않을 수 있습니다(Type Mismatch 오류가 발생할 수도 있습니다).

이 솔루션은 (바람직하게) 모든 유형의 데이터를 처리해야 합니다(적어도 Excel 365에서는 이전 버전에 대한 확신이 없습니다).

Function IsIn(x As Variant, list As Variant) As Boolean
    ' Checks whether list (Array) contains the element x
    IsIn = False
    For Each element In list
        If x = element Then IsIn = True
    Next element
End Function
dim x, y
x = 2
y = Array(1, 2, 3)

For i = 0 To 2
If x = y(i) Then
'your code comes here
Exit For
End If
Next i

지금 썼는데...

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

언급URL : https://stackoverflow.com/questions/1505206/imitating-the-in-operator

반응형