2016-12-22 1 views
1

특정 조건이 충족 될 경우 실행되는 Visual Basic에서 함수를 작성하려고합니다. 그렇지 않으면 함수가 종료됩니다.조건이 충족되지 않을 때 Exit 함수 - Visual Basic

가 지금 내가 다음이, 내 입력

Function answer(list As range) As String 

    Dim extent As Integer 
    extent = list.rows.Value 
    Dim array_1() As Double 
    ReDim array_1(1 To extent) As Double 
    Dim i As Integer 

    For i = 1 To extent 
     array_1(i) = list(i).value 
     If array_1(i) <> "L" Or array_1(i) <> "R" Or array_1(i) <> "PD" Or array_1(i) <> "D" Or array_1(i) <> "PD" Or array_1(i) <> "P" Or array_1(i) <> "S" Then 
      answer = "Your list is not valid" 
      Exit Function 
     End If 
     Next i 

    'Otherwise function will perform rest of code 

    answer = "Your list is valid" 

End Function 

경우 : 예를 들어 =answer(A1:A6) ... 없습니다 "L"또는 "R"또는 "PD"동일한 등을 수행하는 A1 = "XXX"을 말할 수와 내 대답은 "귀하의 목록이 유효하지 않습니다"라고 생각하지만 대신 # VALUE를 얻습니다!

왜 그런지는 분명하지 않습니다.

+1

'정도 = list.rows.count' – nightcrawler23

+0

@Soto에 아래 내 대답에 내 코드를 시도? 아무 피드백 ? –

+0

@ShaiRado 있습니다. 매력처럼 작동합니다! 감사합니다. – Soto

답변

1

이 당신이 당신의 코드를 만들 필요가 몇 가지 수정 : extent 위해서는

  1. 이 범위에서 행의 수를 가지고, extent = list.rows.count를 사용합니다.

  2. 당신은

  3. 당신은 당신의 list (Range.Cells)을 통해 루프 필요 (몰래위한 @ nightcrawler23에 감사) 지점에서 3. 모양, 배열 array_1() 필요하고, 각 cell.Value 경우를 확인하지 않습니다 여기에는 특수 문자가 포함되어 있지 않습니다 (코드를 단순화하고 단축하기 위해 여기 Select Case을 사용했습니다).

코드

Function answer(list As Range) As String 

    Dim extent As Long 
    Dim cell As Range 

    extent = list.Rows.Count 

    ReDim array_1(1 To extent) 

    For Each cell In list.Cells 
     Select Case cell.Value 
      Case "L", "R", "PD", "D", "S" 

      Case Else 
       answer = "Your list is not valid" 
       Exit Function 

     End Select 
    Next cell 

    'Otherwise function will perform rest of code 
    answer = "Your list is valid" 

End Function 
+0

array_1을 전혀 필요로하지 않습니다. 이렇게하면 코드가 많이 줄어들 것입니다. – nightcrawler23

+1

'사례 셀 선택. 값 '을 사용하십시오. – nightcrawler23

+0

@ nightcrawler23 감사합니다. 맞습니다. 원본 코드를 사용하고 있었지만, 필요하지 않다는 것을 눈치 채지 못했습니다. –

0

을 (시험) 또는 루프를 우회 한 라인 COUNTIF 사용

시험

Sub GetValues() 
MsgBox Answer([A1:B10]) 
End Sub 

방지 동작을

Function Answer(list As Range) As Boolean 
Answer = (Evaluate("Sum(COUNTIF(" & list.Address & ",{""L"",""R"",""PD"",""D"",""S""}))") = list.Cells.Count) 
End Function 
관련 문제