如果是在原數量上減少,公式 =A1*(1-DATEDIF(B1,TODAY(),"d")*0.05),或=A1*(1-DATEDIF(B1,"2014-8-2","d")*0.05),結果可能是負值,前壹公式每次打開工作表時都會自動重算,後壹公式不會。
如果是在前壹次的數量上減少,用自定義函數更為方便:
按Alt+F8打開宏對話框,輸入宏名後單擊”創建“按鈕
這時,會自動切換到Visual Basic編輯窗口。將Sub GetFreeNumber()中的Sub改成Function(End Sub中的Sub會自動變成Function),在"()"之中輸入“InitialValue, StartDate, EndDate”(不含引號,其中InitialValue表示初始數值, StartDate表示起始日期,EndDate表示截止日期)
在Function GetFreeNumber()和End Function之間輸入代碼,代碼如下:
‘--代碼頂部--------------------------------
on error goto errdo
dim ResultValue,date0,date1,dd,i
if isobject(initialvalue) then
ResultValue=initialvalue.value
elseif isnumeric(initialvalue) then
ResultValue=initialvalue
else
getfreenumber=cverr(xlErrValue)
exit function
end if
if isobject(startdate) then
date0=datevalue(startdate.text)
else
date0=datevalue(startdate)
end if
if isobject(enddate) then
date1=datevalue(enddate.text)
else
date1=datevalue(enddate)
end if
dd=datediff("d",date0,date1)
for i=1 to dd
ResultValue=ResultValue*0.95
next
getfreenumber=ResultValue
exit function
errdo:
getfreenumber=cverr(xlErrValue)
‘--代碼底部--------------------------------
如果減少的百分率不是定值,可以修改如下:
增加1個參數插入到InitialValue後面:DropPct,參數變成:InitialValue, DropPct, StartDate, EndDate
增加1個變量:dpct,變量聲明行變成:dim?ResultValue,date0,date1,dd,i,dpct
於DropPct配套的代碼(建議在end if和if isobject(startdate) then之間插入)如下:
if isobject(droppct) then
dpct=droppct.value
else
dpct=droppct
end if
if not isnumeric(dpct) then
getfreenumber=cverr(xlErrValue)
exit function
endif
ResultValue=ResultValue*0.95改成ResultValue=ResultValue*(1-dpct)
使用方法:
引用單元格:=GetFreeNumber(A1,B1,C1,D1),A1是初始值,B1是減少的百分率,C1是開始日期,D1是截止日期
指定參數值:=GetFreeNumber(A1,0.05,B1,#2014-8-2#),A1是初始值,B1是開始日期
等同公式=GetFreeNumber(A1,0.05,B1,"2014-8-2")