2017-03-20 4 views
0

배열에 변수가 있습니다. "예", "아니오", "NA"또는 "-"일 수 있습니다. 예를 들어, 배열 arr (1 t0 5) 있습니다. 값은 '예, 예, 아니오, 아니오 & 예'입니다. 어레이의 길이는 다를 수 있습니다. 위의 네 가지 값 ("Yes", "No", "NA"또는 "-")을 사용하면 조합이 달라질 수 있습니다. 내 요구 사항은 배열의 값을 비교하고 결과를 셀의 Excel 작업 시트. 예를 들어 array의 모든 값이 'Yes'또는 'NA'이면 결과는 'Yes'여야합니다. 값이 'No'또는 '-'이면 결과는 'No'여야합니다.배열의 값을 비교하고 결과를주는 VPA 프로그램

답변

3

Application.Match을 사용하여 arr 배열에 적어도 1 개의 "아니오"가 있는지 찾을 수 있습니다.

Option Explicit 

Sub CheckArray() 

Dim arr As Variant 
Dim Res As Variant, r As Variant 
Dim Result As String 

' test #1: at least 1 "No" or "-" in array 
arr = Array("Yes", "-", "Yes", "NA", "Yes") 

Res = Application.Match(Array("No", "-"), arr, 0) 
For Each r In Res 
    Result = "Yes" ' init value 
    If Not IsError(r) Then ' <-- at least 1 result of "-" or "No" found 
     Result = "No" 
     Exit For 
    End If 
Next r  
' === The result is "No" === 


' test #2: there are no "No" or "-" in the array 
arr = Array("Yes", "NA", "Yes", "NA", "Yes") 

Res = Application.Match(Array("No", "-"), arr, 0) 
For Each r In Res 
    Result = "Yes" ' init value 
    If Not IsError(r) Then ' <-- at least 1 result of "-" or "No" found 
     Result = "No" 
     Exit For 
    End If 
Next r 

' === The result is "Yes" === 

End Sub 
+1

점심 시간에 빵과 버터! :/ –

+0

필자는 어떤 전제 조건없이 테스트 케이스를 포함 해 자체적으로 대답한다는 사실을 특히 좋아합니다. 굉장해! – Ralph

+0

이것은 지옥처럼 느립니다! 'Application.Match'와 같은 셀 함수 사용을 피하십시오. 셀 묶음을 통한 루프가 훨씬 빠릅니다. 저는 여러분의 함수와 30000'yes'로 테스트를 실행하고 30001에서 평균 7-8 초 만에'no'를 테스트합니다. 그리고 내 대답 0.4 초 같은 루프와 동일! –