首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Access VBA中插入表中缺少的值

在Access VBA中插入表中缺少的值
EN

Stack Overflow用户
提问于 2015-09-18 19:19:14
回答 2查看 741关注 0票数 1

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

代码语言:javascript
复制
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列中缺少一些日期(例如,7/4/2015 ),我希望使用与同一MarkDate相关的所有值(即7/2/2015)插值该值。

如何在Access中的值之间插入?我有一个用于Excel的函数,但我很难将它转换为访问VBA。我在考虑建立一个以

代码语言:javascript
复制
Function CurveInterpolateRecordset(rsCurve As Recordset, InterpDate As Date) As Double

这样我就可以直接用给定的曲线和日期进行插值,但我无法让它工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-18 22:25:35

这是一个普通的SQL解决方案。是用SQL server创建的,但是所有函数都应该在ACCESS中找到。

  • IIF
  • DATEDIFF

描述

  1. 我为源代码创建了一个简化的表版本,以创建插值。
  2. 我创建了一个表allDates,您可以在这里存储所有可用的日期,这样就可以找到丢失的日期。有函数可以很容易地创建该表。
  3. 创建表rangesInter --计算范围,如果范围是>1 day,则缺少日期。在这种情况下,保存startRatechangeRate进行插值。
    • 在完成之后,我意识到这个查询也可以直接包含在select中,就像我创建(min , max)表一样。

  1. 将所有表连接在一起,结果是前3列,但我保留全部,这样您就可以检查日期是从哪里来的。

SQL Fiddle演示

代码语言:javascript
复制
   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
EN

Stack Overflow用户

发布于 2015-09-18 21:28:56

下面是标识缺失值的代码:

查找缺失值

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

找出失踪日期

有了这些,就像Varun状态一样,使用线性插值来计算丢失的测量值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32659527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档