2013-10-10 2 views
0

다음 코드를 사용합니다. 문제가 없지만 contador = 0 인 경우 코드의 마지막 부분에서 개선하고 싶습니다. mespt = "아니오 자체 considera"대신 단지 0VBA Excel- 숫자 또는 문자열을 반환하는 함수

Public Function mespt(tutor As String, mes As String, j As Long) As Double 


Application.Volatile 

Dim a As Long 
Dim totalmesp As Double 


mespt = 0 
contador = 0 
totalmespt = 0 
For i = 4 To 1000 
If Sheets("Hoja1").Cells(i, 2).FormulaR1C1 = tutor And Sheets("Hoja1").Cells(i, 5).FormulaR1C1 = mes Then 
Select Case Sheets("Hoja1").Cells(i, j).Value 



Case "No cumple" 
a = 0 
contador = contador + 1 
Case "Regular" 
a = 1 
contador = contador + 1 
Case "Pleno" 
a = 3 
contador = contador + 1 
Case "No se considera" 
a = 0 
End Select 


totalmespt = totalmespt + a 
If contador = 0 Then 
mespt = 0 
Else 
mespt = totalmespt/contador 
End If 

End If 
Next 


End Function 

I`ve는 다음과 같은 방법으로 변형 사용 반환 :

Funcion mespt(      ) as Variant 
....... 

if contador = 0 then 
mespt="No se considera" then 
mespt=totalmespt/contador 
end if 

end function 

그러나 케이스 콘타 도르 = 0에서 함수를 바로 반환 #! Valor

죄송합니다. 내가 지금 예상대로 변종 유형 괜찮아 workink이야, 문제는 함수 mespt와 함께 작동 엑셀의 수식과 함께했다.

+3

Varient로 환원하는 것은 어떻습니까? – JSJ

+0

@jsj : 유효한 답변입니다. :) 당신은 대답으로 그것을 넣을 수 있습니다? –

+0

내 코드를 구현하여 내 권장 사항을 확인하십시오. 불행히도 작동하지 않습니다. – CreamStat

답변

1

JSJ가 말한 바와 같이 변형을 사용하십시오.

VBA는 자동으로 변형 유형을 적절한 유형으로 변환합니다. 아래 예제에서 함수는 함수에 대한 인수에 따라 반환 값을 부울 또는 문자열 값으로 설정합니다. 코드에 대한


Private Function returnVariant(returnBoolean As Boolean) As Variant 

    If returnBoolean Then 
     returnVariant = False 
    Else 
     returnVariant = "Hi this is a string" 
    End If 

End Function 

Private Sub showFunctionExample() 
    Dim v As Variant 
    Dim v2 As Variant 

    v = returnVariant(True) 
    v2 = returnVariant(False) 

    Debug.Print CStr(v) + "- Type: " + CStr(TypeName(v)) 
    Debug.Print v2 + "- Type:" + TypeName(v2) 
End Sub 
는 할 : 당신이해야합니다

Public Function mespt(tutor As String, mes As String, j As Long) As Variant 


Application.Volatile 

Dim a As Long 
Dim totalmesp As Double 


mespt = 0 
contador = 0 
totalmespt = 0 
For i = 4 To 1000 
If Sheets("Hoja1").Cells(i, 2).FormulaR1C1 = tutor And Sheets("Hoja1").Cells(i, 5).FormulaR1C1 = mes Then 
Select Case Sheets("Hoja1").Cells(i, j).Value 



Case "No cumple" 
a = 0 
contador = contador + 1 
Case "Regular" 
a = 1 
contador = contador + 1 
Case "Pleno" 
a = 3 
contador = contador + 1 
Case "No se considera" 
a = 0 
End Select 


totalmespt = totalmespt + a 
If contador = 0 Then 
mespt="No se considera" 
Else 
mespt = totalmespt/contador 
End If 

End If 
Next 


End Function 

참고가 변형하지 않은 경우 당신이 오류를 얻을 것이다 스스로를 입력 변수로이 기능을 할당 조심해야 문자열을 반환하고 double에 할당합니다.

+0

사용자 지정 워크 시트 기능으로 사용할 VBA 함수에서 작동하도록 할 수 있습니까 ?? 귀하의 returnVariant 함수를 테스트 한 결과 작동하지 않는 것 같습니다. 배경 - double 또는 오류 메시지를 문자열로 반환하고 싶습니다. –

0

나중에 변수를 반환 할 때 오류가 발생할 수 있으므로 Variant 방식을 사용하지 않습니다. 모든 계정에서 String으로 반환합니다.

Public Function mespt(tutor As String, mes As String, j As Long) As String 


Application.Volatile 

Dim a As Long 
Dim totalmesp As Double 


mespt = 0 
contador = 0 
totalmespt = 0 
For i = 4 To 1000 
If Sheets("Hoja1").Cells(i, 2).FormulaR1C1 = tutor And Sheets("Hoja1").Cells(i, 5).FormulaR1C1 = mes Then 
Select Case Sheets("Hoja1").Cells(i, j).Value 



Case "No cumple" 
a = 0 
contador = contador + 1 
Case "Regular" 
a = 1 
contador = contador + 1 
Case "Pleno" 
a = 3 
contador = contador + 1 
Case "No se considera" 
a = 0 
End Select 


totalmespt = totalmespt + a 
If contador = 0 Then 
mespt = 0 
Else 
mespt = totalmespt/contador 
End If 

End If 
Next 


End Function 

그리고 표현의 데이터 유형은 부울 경우가 진정한 반환을

Sub Sample() 
IF IsNumeric(mespt("a","b","c") Then 
    'Code if it comes back with a number 
Else 
    'Code to run if it doesn't not return number 
End If 
End Sub 

또는

=if(ISNUMBER(mespt(a,b,c)), "What to do If Number is Returned", "What To do if NON-Number is returned") 

IsNumeric 반환을 테스트 사용하는 경우, 바이트, 진수, 더블, 정수, , SByte, 짧은, 단일, UInteger, ULONG, 또는 USHORT, 또는 해당 숫자 형식 중 하나를 포함하는 개체입니다. 또한식이 성공적으로 숫자로 변환 될 수있는 Char 또는 String 인 경우 True를 반환합니다.

IsNumeric 반환 거짓을 표현 데이터 유형 또는 데이터 유형 객체의 일이며이 숫자 유형을 포함하지 않는 경우. 표현은 숫자로 변환 할 수없는 숯불 또는 문자열 인 경우

IsNumeric거짓를 반환합니다.