"IN" 연산자 모방
다음을 실현하는 방법:
if X in (1,2,3) then
다음 대신:
if x=1 or x=2 or x=3 then
바꿔 말하면, 어떻게 하면 가장 잘 모방할 수 있을까?IN
VBA의 오퍼레이터가 엑셀을 취득할 수 있습니까?
나는 매우 우아한 해결책은 없다고 생각한다.
단, 다음과 같은 방법이 있습니다.
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..CASE
OP의 목표는 아마도 작업을 단순화하고 단축하는 것이었기 때문이다.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
'source' 카테고리의 다른 글
인터페이스 빌더의 iOS 멀티라인 라벨 (0) | 2023.04.22 |
---|---|
데이터베이스 다이어그램 또는 테이블을 설계하는 데 백엔드 버전이 지원되지 않습니다. (0) | 2023.04.22 |
Windows 배치 파일에서 "확신하시겠습니까?" 프롬프트를 표시하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
ASP에서 HTML/이메일 템플릿을 설정할 수 있습니까?인터넷? (0) | 2023.04.22 |
Excel에서는 각 행의 한 열에 있는 모든 값을 합산하고 다른 열은 특정 값입니다. (0) | 2023.04.22 |