2013-08-07 2 views
0

다음을 달성하려고합니다. 사용자가 변경할 수있는 가정 목록이있는 Excel 스프레드 시트가 표시됩니다.변수의 출력/인쇄 (if 문에서)

Title  |  Value  | 
Input01  |  10   | = 
Input02  |  2   | >= 
Input03  |  800  | >= 
Input04  |  4   | >= 
Input05  |  2   | <= 

는 가정이 충족 될 경우 데이터를 끌어 내리는 If .. Then 문이있다. 그러나 가정이 블랭크 인 경우, 이는 If .. Then 성명서에 포함되어서는 안됩니다.

If x = Input01Value And y >= Input02Value _ 
And z >= Input03Value And a >= Input04Value _ 
And b <= Input05Value Then 

사용자 Input03

If x = Input01Value And y >= Input02Value _ 
And a >= Input04Value And b <= Input05Value Then 

가 지금은 각각의 값이 존재하는지 확인하고 적절한 변수와 다른 If 문을 수행 할 수 ommits. 그러나 이것은 약간 중복 된 것처럼 보입니다.

Input 01 = "" 
If Input01Value != "" Then Input01 = "x = " & Input01Value 
'Then use join or something similar to join all of them .. 

을 다음 If .. Then 문에서 직접이 Input01을 사용

나는 다음과 같은 가능한 경우 궁금 해서요. 변수가 비어있는 경우 And ..이 포함되지 않고 If 문이 실패하지 않습니다.
예 : 내가 뭔가를 할 수있는 알고,

VBA: If Input01 Then 
Result while compiling: If x = Input01Value Then 

참고하시기 바랍니다 (I이 바로 시나리오를 설명 작동하지 않습니다 알고) 다음 다음
If Boolean And Variable2 > 4 ThenBoolean 가지고 Variable2 셀의 값으로 채 웁니다 그러나이 문제는 예를 들어 사용자가 Variable2 (합리적 임)을 생략하면 실패 할 것이라는 점입니다. 예. If (Boolean = True) And > 4 Then.

호프 내 질문에 분명히 도움을 주셔서 감사합니다.

+0

논리에 코드를 삽입 할 필요가 없습니다.'If' 테스트를 작성하여'CoverageRatioInput' 값을 직접 사용해야합니다. –

+0

그러나 'CoverageRatioInput'에 값이 없으면 실패합니다. 맞습니까? –

+0

그런 다음 먼저 값이 있는지 테스트합니다 ... 테스트를 수행하기 위해 코드를 작성하는 데 필요한 동일한 논리를 모두 테스트에서 직접 표현할 수 있습니다. –

답변

1

문자열 연산자와 두 개의 값에 따라 선택 사례에서 작동하는 함수를 사용하는 것은 어떻습니까?

Function conditionalString(condition As String, x As Variant, y As Variant) As Boolean 
Select Case condition 
    Case "=" 
     If (x = y) Then 
      conditionalString = True 
     Else 
      conditionalString = False 
     End If 
     Exit Function 
    Case ">=" 
     conditionalString = (x >= y) 
     Exit Function 
    Case "<=" 
     conditionalString = (x <= y) 
     Exit Function 
    Case ">" 
     conditionalString = (x > y) 
     Exit Function 
    Case "<" 
     conditionalString = (x < y) 
     Exit Function 
    Case Else 
     conditionalString = False 
End Select 
End Function 

그러면 모든 가정을 호출하기 전에 "값이 비어 있지 않은지 확인하십시오"라고 말하면됩니다.

+0

도움을 주셔서 감사합니다. –

1

내 의견을 확대하면 각 입력 행을 테스트 할 때 이와 같은 방법을 사용할 수 있습니다.

Function TestIt(testValue,inputOperator,inputValue) As Boolean 
    If Len(inputValue)=0 Then 
     TestIt=True 'ignore this test: no value supplied 
    Else 
     TestIt=Application.Evaluate(testValue & inputOperator & inputValue) 
    End If 
End function 
+0

도움을 주셔서 감사합니다. –