如何创建变化率功能

时间:2016-03-27 02:19:42

标签: vba ms-access access-vba

尝试在VBA中创建一个函数,以便我可以只查询一个表(tblGeoData)并使用函数for field(lngPopulation)。表(tblGeoData)有多行,每年一行(tblGeoData = lngYear中的字段)。所需年份将使用Global Const(lngDataYr)定义。因此该函数将获取tblGeoData.lngPopulation,其中tblGeoData.lngYr = lngDataYr,lngDataYr-1,lngDataYr-2。因此,如果Global Const lngDataYr设置为2014,那么该函数将在2014年,2013年和2012年抓住lngPopulation。然后,使用lngPopulation的3个值计算平均变化率(为简洁而缩短为pop):

AvgChangeRate =((2014年流行音乐 - 2013年流行音乐)/ 2013年流行音乐+(2013年流行音乐 - 2012年流行音乐)/ 2012年流行音乐)/ 2

确切地说如何创建这个函数,但我认为它可以用于任何字段,而不仅仅是lngPopulation,它将有2个参数,1是字段,另一个是指定哪些行的标准。可能,我可以先查询行(比如使用名为GetlngDataYr的函数调用Global Const:

SELECT tblGeoData.lngPopulation
FROM tblGeoData
WHERE tblGeoData.lngYear In(GetlngDataYr(),GetlngDataYr-1,GetlngDataYr-2);

但是函数也可以提取数据。

1 个答案:

答案 0 :(得分:0)

您可以只检索这三个值并进行计算:

Public Function PopRate() As Double

    Dim rs As DAO.Recordset
    Dim AvgChangeRate As Double
    Dim SQL As String
    Dim Pops As Variant

    SQL = "SELECT lngPopulation As pop FROM tblGeoData WHERE lngYear Between GetlngDataYr() And (GetlngDataYr() - 2) Order By lngYear Desc;"

    Set rs = CurrentDb.OpenRecordset(SQL)
    ' Copy values to array.
    Pops = rs.GetRows(3)
    rs.Close

    AvgChangeRate = ((Pops(0, 0) - Pops(0, 1)) / Pops(0, 1) + (Pops(0, 1) - Pops(0, 2)) / Pops(0, 2)) / 2

    Set rs = Nothing

    Poprate = AvgChangeRate

End Function