如何在Excel UDF函数中返回值?

我有一些代码写在VBA函数中,但我坚持如何返回if – else语句中的输出值areaAnswer1&areaAnswer2。 我还是这个新手。 任何帮助和build议,非常感谢。

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 

在VBA中,通过将函数赋值给函数来设置返回值:

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

请注意,该function的分配不会退出该function。 在这种情况下,你不需要立即退出,因为你已经在结束了。 但在某些情况下,只要您分配了返回值,就要退出函数:

 Exit Function 

只要函数等于一个types值或最后一个variables。

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

请注意,您已指定返回一个不能包含小数的整数,并且必须小于32667(或大约)。