在Access VBA中的表中插入缺失值

时间:2015-09-18 19:19:14

标签: sql database vba ms-access access-vba

我有一个Access函数,可以按以下格式将值表导出到Excel。

ID  CurveShortName  MarkRunID MarkDate ZeroCurveID MaturityDate ZeroRate    DiscountFactor
15  CAD Sovereign   10091   7/2/2015    15-10091    7/2/2015    0.007499923 1
15  CAD Sovereign   10091   7/2/2015    15-10091    7/3/2015    0.007499923 0.999979452
15  CAD Sovereign   10091   7/2/2015    15-10091    7/5/2015    0.00899634  0.999186963
15  CAD Sovereign   10091   7/2/2015    15-10091    7/6/2015    0.008993128 0.998473566

等。

MaturityDate列中缺少一些日期(例如2015年7月4日),我想使用与相同MarkDate相关联的所有值(将于2015年7月2日)插入此值。

如何在Access中的值之间进行插值?我有一个用于Excel VBA的功能,但我很难将其转换为Access VBA。我正在考虑以

开头的东西
Function CurveInterpolateRecordset(rsCurve As Recordset, InterpDate As Date) As Double

这样我就可以使用给定的曲线和日期直接插值,但我无法使其正常工作。

2 个答案:

答案 0 :(得分:1)

这是一个简单的SQL解决方案。使用SQL server制作,但所有功能都应在ACCESS

中找到

描述

  1. 我为源创建了一个简化版本来创建插值
  2. 我创建了一个表allDates,您可以在其中存储所有可用日期,这样可以找到缺少的日期。创建该表非常容易functions
  3. 创建表rangesInter如果范围为>1 day您缺少日期,则计算范围。在这种情况下,请保存startRatechangeRate进行插值。
    • 完成后我意识到这个查询也可以直接包含在select中,就像我创建(min , max)表一样。
  4. 将所有表格加在一起,结果是前三列,但我全部保留,以便您可以查看日期的来源。
  5. <强> SQL Fiddle Demo

       SELECT 
           IIF(i.MarkDate IS NULL, r.MarkDate, i.MarkDate) as MarkDate,
           a.MaturityDate,
           IIF(
               i.ZeroRate IS NULL,
               r.startRate + DATEDIFF ( day , r.begindate, a.MaturityDate ) * rateChange,
               i.ZeroRate
              ) as ZeroRate, -- use values from r to interpolate rate
           i.*, r.*
       FROM  allDates a
       left Join Inter I
        on a.MaturityDate  = I.MaturityDate
       cross join
        (SELECT MIN(MaturityDate) minDate, MAX(MaturityDate) maxDate
         FROM Inter) as t
       left join rangesInter r
         on a.MaturityDate > r.[begindate]
        and a.MaturityDate < r.[enddate] 
       where a.MaturityDate >= t.minDate
         and a.MaturityDate <= t.maxDate;
    

答案 1 :(得分:0)

以下是识别缺失值的代码:

Find missing values

虽然第2页上的下载代码显示了如何查找缺少的日期:

Find missing dates

有了这些,你会 - 如Varun所说 - 使用线性插值来计算缺失的测量结果。