programing

값이 목록의 구성원인지 확인하는 중

css3 2023. 9. 2. 08:44

값이 목록의 구성원인지 확인하는 중

  • 사용자 입력을 항목 목록과 비교하여 확인해야 합니다. 입력이 항목 목록에 있으면 흐름을 한쪽으로 향하게 합니다.그렇지 않은 경우 흐름을 다른 방향으로 보냅니다.
  • 이 목록은 워크시트 자체에 표시되지 않으므로 코드에서 난독화되어야 합니다.

이를 위한 두 가지 전략을 생각해 보았습니다.

  1. 를 선로다로 합니다.enum그리고 입력이 이것의 일부인지 확인합니다.enum이것에 대한 구문은 잘 모르겠지만, 초기화해야 합니까?enum사용하고 싶을 때마다?
  2. 배열로 선언하고 입력이 이 배열의 일부인지 확인합니다.

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을 통해 반복하는 동안EListEnum의 String 표현과 일치합니다.많은 메소드를 호출하고 열거형을 반복해야 간단한 작업을 수행할 수 있기 때문에 오버킬입니다.DictionaryExists방법은 한 번에 가능합니다.이러한 이유로 특정 문제에 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