값이 목록의 구성원인지 확인하는 중
- 사용자 입력을 항목 목록과 비교하여 확인해야 합니다. 입력이 항목 목록에 있으면 흐름을 한쪽으로 향하게 합니다.그렇지 않은 경우 흐름을 다른 방향으로 보냅니다.
- 이 목록은 워크시트 자체에 표시되지 않으므로 코드에서 난독화되어야 합니다.
이를 위한 두 가지 전략을 생각해 보았습니다.
- 를 선로다로 합니다.
enum
그리고 입력이 이것의 일부인지 확인합니다.enum
이것에 대한 구문은 잘 모르겠지만, 초기화해야 합니까?enum
사용하고 싶을 때마다? - 배열로 선언하고 입력이 이 배열의 일부인지 확인합니다.
VBA가 효율성과 가독성 면에서 어느 것이 더 나은지 궁금합니다.
아래와 같이 간단한 배열 테스트를 실행하여 단어를 단일 목록에 추가할 수 있습니다.
Sub Main1()
arrList = Array("cat", "dog", "dogfish", "mouse")
Debug.Print "dog", Test("dog") 'True
Debug.Print "horse", Test("horse") 'False
End Sub
Function Test(strIn As String) As Boolean
Test = Not (IsError(Application.Match(strIn, arrList, 0)))
End Function
더 을 수행하고 하려면 또는더자검수을고추작가위다업하해니사다일합용음면을반려환하목을록을 합니다.Filter
는 이코는다반니다합환음을 통해 합니다.vFilter
를 보면dog
개, 개고기
이 특정한 경우 코드는 다음에 대한 정확한 일치를 확인합니다.dog
.
Sub Main2()
arrList = Array("cat", "dog", "dogfish", "mouse")
Debug.Print "dog", Test1("dog")
Debug.Print "horse", Test1("horse")
End Sub
Function Test1(strIn As String) As Boolean
Dim vFilter
Dim lngCnt As Long
vFilter = Filter(arrList, strIn, True)
For lngCnt = 0 To UBound(vFilter)
If vFilter(lngCnt) = strIn Then
Test1 = True
Exit For
End If
Next
End Function
.로 표시하지 .NET 언어 VBA는 Enum을 텍스트로 표시하지 않습니다.이고 엄게숫없습다니고는 ..ToString()
Enum의 이름을 노출하는 메서드입니다.사용자 자신의 데이터를 생성할 수 있습니다.ToString()
메서드 및 열거형의 String 표현을 반환합니다.Enum 유형을 열거할 수도 있습니다.모든 것이 달성 가능하지만 이러한 단일 작업에 대한 상황이 너무 복잡하기 때문에 이러한 방식으로 수행하는 것을 권장하지 않습니다.
의 사전 항목의사모만사것용어이까떻니습는하어들을음을 사용하는 것은 어떻습니까?Exist
입력 상자에 있는 사용자 입력이 목록에 있는지 확인하는 방법 및 오류 처리(또는 단순 if/discovery 문).
예를 들어:
Sub Main()
Dim myList As Object
Set myList = CreateObject("Scripting.Dictionary")
myList.Add "item1", 1
myList.Add "item2", 2
myList.Add "item3", 3
Dim userInput As String
userInput = InputBox("Type something:")
If myList.Exists(userInput) Then
MsgBox userInput & " exists in the list"
Else
MsgBox userInput & " does not exist in the list"
End If
End Sub
에 참조를 : 에 를 추가합니다.Microsoft Scripting Runtime
그러면 당신은 도서관과 함께 지능을 사용할 수 있을 것입니다.myList
대체할 때 일찍 바인딩되었을 수 있는 반대.
Dim myList As Object
Set myList = CreateObject("Scripting.Dictionary")
와 함께
Dim myList as Dictionary
Set myList = new Dictionary
어느 쪽으로 가고 싶은지, 무엇이 더 편리한지는 당신에게 달려 있습니다.지능형 얼리 바인딩을 사용하려면 참조가 필요한 상태에서 지연 바인딩을 사용하는 경우 참조를 추가할 필요가 없습니다.
독자들이 Enum을 사용하여 버전을 시각화할 수 있도록 이 메커니즘이 어떻게 작동할 수 있는지 보여드리겠습니다.
Enum EList
item1
item2
item3
[_Min] = item1
[_Max] = item3
End Enum
Function ToString(eItem As EList) As String
Select Case eItem
Case EList.item1
ToString = "item1"
Case EList.item2
ToString = "item2"
Case EList.item3
ToString = "item3"
End Select
End Function
Function Exists(userInput As String) As Boolean
Dim i As EList
For i = EList.[_Min] To EList.[_Max]
If userInput = ToString(i) Then
Exists = True
Exit Function
End If
Next
Exists = False
End Function
Sub Main()
Dim userInput As String
userInput = InputBox("type something:")
MsgBox Exists(userInput)
End Sub
먼저 목록을 Enum으로 선언합니다.저는 가능한 한 간단한 예시를 위해 3개의 항목만 추가했습니다.[_Min]
그리고.[_Max]
enum의 최소값과 최대값을 나타냅니다(이것을 조정할 수도 있지만, 지금은 단순하게 유지합니다).당신은 둘 다 당신의 것을 반복할 수 있다고 선언합니다.EList
.
ToString()
method는 Enum의 String 표현을 반환합니다.모든 VBA 개발자는 어느 시점에서 VBA가 이 기능을 기본 제공 기능으로 누락하는 것이 아쉽다는 것을 인식합니다.어쨌든, 이제 독자적인 구현이 가능합니다.
Exists
무엇이든 가져가다userInput
저장 및 Enum을 통해 반복하는 동안EList
Enum의 String 표현과 일치합니다.많은 메소드를 호출하고 열거형을 반복해야 간단한 작업을 수행할 수 있기 때문에 오버킬입니다.Dictionary
의Exists
방법은 한 번에 가능합니다.이러한 이유로 특정 문제에 Enums를 사용하지 않는 것이 좋습니다.
그러면 결국 당신은 그것을 가지게 됩니다.Main
의 입력을 하여 사자의수입호고서출브는하집라고 입니다.Exists
방법.문자열이 Enum 유형으로 존재하는지 여부를 나타내는 메시지 상자가 표시됩니다.
사용하기만 하면 됩니다.Select Case
목록 포함:
Select Case entry
Case item1,item2, ite3,item4 ' add up to limit for Case, add more Case if limit exceeded
do stuff for being in the list
Case Else
do stuff for not being in list
End Select
언급URL : https://stackoverflow.com/questions/21378974/checking-if-a-value-is-a-member-of-a-list
'programing' 카테고리의 다른 글
마리아와 함께 암호를 쓰는 사람DB (0) | 2023.09.02 |
---|---|
오류입니다. ORA-12154: TNS: 지정된 연결 식별자를 확인할 수 없습니까? (0) | 2023.09.02 |
나침반과 새스는 무엇이며 어떻게 다른가요? (0) | 2023.09.02 |
Mac OS 10.6 Snow Leopard에서 MySql을 시작할 수 없습니다. (0) | 2023.09.02 |
JQuery에서 클릭한 요소를 제외한 모든 클래스를 선택하는 방법은 무엇입니까? (0) | 2023.09.02 |