2013-06-20 3 views
0

꽤 복잡한 VBA 통합 문서를 작성하고 있으며 코드를 실행하는 데 많은 문제가 발생합니다. 나는 다음과 같은 기능을하는 다소 기능이있다.VBA 기능 If 문을 피하는 경우

Public Function zzz (xxx as String) as String 
if xxx = "apple" then zzz = "orange" 
if xxx = "appple2" then zzz = "orange2" 
if xxx = "apple3" then zzz = "apple3" 

등 (그러나 약 30 개의 문자열이있다). 나는이 함수를 여러 번 호출한다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

+0

이렇게하려면 'vlookup()'을 사용하는 것이 좋습니다. –

+2

적어도'else else'를 사용할 수 있습니다. – Brad

+0

이것은 룩업 값과 결과 값의 실제 예입니까? – shahkalpesh

답변

1

거의 없습니다. 그리고 30 개의 현을 위해, 이것은 대단히 느려서는 안됩니다.

성능 문제는 특히 직접 통합 문서와 상호 작용하는 경우 다른 곳에서 발생할 수 있습니다. 무작위로 코드를 업데이트하기 전에 다양한 절차의 시간을 측정 해보십시오.

많은 행이 성능 저하를 의미하지는 않습니다. 모든 라인이 동일한 시간의 실행 시간을 갖는 것은 아닙니다.

1

배열 조합과 WorksheetFunction.Match을 사용하여 함수를 만들 수 있습니다.

Debug.Print zzz("apple2") 

과 함께 발생합니다 : VBA에서 함수의

Public Function zzz(xxx As String) As String 
    Dim funInput As Variant 
    Dim funOutput As Variant 
     funInput = Array("apple", "apple2", "apple3") 
     'above array- add additional input elements and... 
     '...match them with resulting items in below array 
     funOutput = Array("orange", "orange2", "apple3") ' 

    zzz = funOutput(Application.Match(xxx, funInput, 0) - 1) 
End Function 

샘플 호출이이 길을 갈 것

orange2 
+0

+1 'Application.Match'를 사용하여 배열을 색인화하는 접근법을 보지 못했습니다. 혁신적. 그것처럼. –

1

만하면 당신은 선택 케이스를 사용하여 시도 할 수 하나의 변수 값을 확인하는 것. 그것은 올바른 변수를 찾으면 나머지 줄을 건너 뛰기 때문에 더 빠릅니다.

Select case xxx 
case "apple" 
zzz = "orange" 
case "apple2" 
zzz = "orange2" 
case "apple3" 
zzz = "orange3" 
End Select 
관련 문제