2016-07-02 7 views
1

私はVBAの関数で書かれたコードをいくつか持っていますが、出力値を返す方法については固執しています。if-else文の中にはareaAnswer1 & areaAnswer2があります。私はまだこれに新しいです。任意のヘルプ&の提案は非常に感謝しています。 VBAでExcel UDF関数で値を返す方法は?

Function dateArea(inputDate1 As Date, t1 As Date, t2 As Date, duration As Integer, output As Integer) As Integer 
    endOfYear = Workbook.Date(Year(inputDate1), 12, 31) 
    inputDate2 = Workbook.Date(Year(inputDate1) + 1, Month(inputDate1), Day(inputDate1)) 
    endOfDate1 = Workbook.Date(Year(inputDate1) + duration, Month(inputDate1), Day(inputDate1)) 
    endOfDate2 = Workbook.Date(Year(inputDate2) + duration, Month(inputDate2), Day(inputDate2)) 
    areaBase1 = endOfYear - inputDate1 
    areaBase2 = inputDate2 - endOfYear 
    totalArea1 = areaBase1 * 365 
    totalArea2 = areaBase2 * 365 
    triangleBase1 = endOfDate1 - inputDate1 
    triangleHypo1 = Workbook.Sqrt((365 * 365) + (triangleBase1 * triangleBase1)) 
    triangleBase2 = t1 - inputDate2 
    triangleHypo2 = triangleHypo1 * triangleBase2/triangleBase1 
    triangleHeight2 = Workbook.Sqrt((triangleHypo2 * triangleHypo2) - (triangleBase2 * triangleBase2)) 
    triangleArea2 = (triangleBase2 * triangleHeight2)/2 
    triangleBase3 = (inputDate2 - endOfYear) + (t1 - inputDate2) 
    triangleHypo3 = triangleBase3 * triangleHypo2/(t1 - inputDate2) 
    triangleHeight3 = Workbook.Sqrt((triangleHypo3 * triangleHypo3) - (triangleBase3 * triangleBase3)) 
    triangleArea3 = (triangleBase3 * triangleBaseHeight3)/2 
    areaDiffBot2 = triangleArea3 - triangleArea2 
    triangleBase4 = 365 + (t1 - inputDate2) 
    triangleHypo4 = triangleBase4 * triangleHeight2/(t1 - inputDate2) 
    triangleHeight4 = Workbook.Sqrt((triangleHypo4 * triangleHypo4) - (triangleBase4 * triangleBase4)) 
    triangleArea4 = (triangleBase4 * triangleHeight4)/2 
    areaDiffBot1 = triangleArea4 - triangleArea3 
    triangleHeight5 = 365 * (endOfDate1 - t2)/triangleBase1 
    triangleHypo5 = Workbook.Sqrt((triangleHeight5 * triangleHeight5) + ((endOfDate1 - t2) * (endOfDate1 - t2))) 
    triangleArea5 = (endOfDate1 - t2) * triangleHeight5/2 
    triangleBase6 = (endOfDate1 - t2) + areaBase1 
    triangleHeight6 = (triangleBase6) * 365/(endOfDate1 - t2) 
    triangleHypo6 = Workbook.Sqrt((triangleBase6 * triangleBase6) + (triangleHeight6 * triangleHeight6)) 
    triangleArea6 = (triangleBase6 * triangleHeight6)/2 
    areaDiffTop1 = triangleArea6 - triangleArea5 
    triangleBase7 = triangleBase6 + areaBase2 
    triangleHeight7 = triangleBase7 * triangleHeight6/triangleBase6 
    triangleHypo7 = Workbook.Sqrt((triangleBase7 * triangleBase7) + (triangleHeight7 * triangleHeight7)) 
    triangleArea7 = (triangleBase7 * triangleHeight7)/2 
    areaDiffTop2 = triangleArea7 - triangleArea6 
    totalUsedArea1 = areaDiffTop1 + areaDiffBot1 
    totalUsedArea2 = areaDiffTop2 + areaDiffBot2 
    areaAnswer1 = totalArea1 - totalUsedArea1 
    areaAnswer2 = totalArea2 - totalUsedArea2 
    If output = 1 Then 

    ElseIf output = 2 Then 

    ElseIf output = 3 Then 

    Else 

    End If 
End Function 
+0

ああ、そうです。申し訳ありませんが、私はそれを修正します。 –

答えて

2

あなたは、このような機能に割り当てることによって戻り値を設定します。機能への割り当てが機能を終了していないこと

areaAnswer1 = totalArea1 - totalUsedArea1 
areaAnswer2 = totalArea2 - totalUsedArea2 
If output = 1 Then 
    dateArea = areaAnswer1 
ElseIf output = 2 Then 
    dateArea = areaAnswer2 
ElseIf output = 3 Then 
    ' ...etc 

注意。この場合、すでに終了しているのですぐに終了する必要はありません。しかし、いくつかのケースでは、あなたはすぐにあなたが戻り値を割り当てたとして、機能を終了することをお勧めします:

Exit Function 
2

ジャスト機能を持って最後に入力した値や変数の1に等しいです。

select case output 
    case 1 
     dateArea = totalUsedArea1 
    case 2 
     dateArea = totalUsedArea2 
    case 3 
     dateArea = totalUsedArea3 
    case else 
     'do something or nothing 
end select 

あなたは小数点以下を含めることはできませんし、32667よりも小さい(またはそこabouts)でなければならない整数を返す指定されている注意してください。

+1

16ビット整数 - > 2^16 = 32768。 – user1016274

関連する問題