MS Access Query - 以列为单位显示多年的每个月的数据

时间:2016-07-12 22:10:12

标签: excel-vba ms-access ms-access-2013 vba excel

好的,我在这方面非常新,并且在过去几个小时里一直在谷歌搜索,但没有找到任何东西。也许我不是在寻找合适的东西,或者我看起来不够努力,但我现在在这里。

我需要为每个月(超过5年)做3次计算才能显示为列(3 * 12 * 5 =总共180列)。我在Excel中有模拟公式:

月份分数 =IF(AND(FEStart>=s01Y15,FEStart<=e01Y15),IF(FEStart=s01Y15, 1, ((e01Y15-(FEStart))+1)/DAY(e01Y15)),IF(AND(FEEnd>=s01Y15,FEEnd<=e01Y15),IF(FEEnd=e01Y15, 1, ((FEEnd)-(s01Y15))/DAY(e01Y15)),IF(FEEnd<=e01Y15, 0, IF(FEStart<=s01Y15,1,0))))

人年 =IF(AND(FEStart>=s01Y15,FEStart<=e01Y15),1,IF(AND(FEEnd>=s01Y15,FEEnd<=e01Y15),INT((s01Y15-FEStart)/365)+1,IF(FEEnd<= e01Y15, 0, IF(FEStart<=s01Y15,INT((s01Y15-FEStart)/365)+1,0))))

月薪 =([Fraction of Month]*(SF/12))*(1.03^([Year of Person]-1))

哪里

  • FEStart是人物的开始日期(由用户输入)
  • s01Y15是2015年第一个月的开始(由我设置的参数)
  • FEEnd是人的结束日期(由用户输入)
  • e01Y15是2015年第一个月的结束(由我设置的参数)
  • SF是此人的年薪(由用户输入)

我了解必须将IF()更改为IIF()并使用AS命名查询中的字段为sql代码。但是,我试图看看我是否可以进行某种循环,所以我不必手动更改变量并写出180行。如果我必须这样做,我会的。但我真的不愿意。

有没有办法使用while循环或for循环或其他一些循环让MS Access为我创建这些180列,而没有180行代码?或者我只需要复制并粘贴一吨?

免责声明:我正在使用MS Access 2013.此外,我对Excel中的VBA代码有一些经验(我使用Excel比使用MS Access更舒服)但不确定如何使用将VBA代码添加到查询中(我已将其添加到我的表单中)。

我也有想法在每个循环中更改s01Y15和e01Y15的值,但这可能有点复杂,所以我只有(12 * 2 * 5 = 120)120个变量设置为开始和结束日期每个月(回想起来可能不是最好的主意)。无论如何,我仍然无法在查询中使用循环(如果它甚至可以 )。

编辑:不确定这是否有用,但这就是我所拥有的:

人员表的输入数据: 人名(分为f / l),开始/结束日期(FEStart / FEEnd),薪水(SF)。

人们查询显示:人名,开始/结束日期(FEStart / FEEnd),薪水(SF),&amp;我上面描述的180列。

对计算的限制:一个月的分数应该是一个不大于1的正数。人的年份开始为1并且在每年之后增加(一个)(基本上是无限的,但我只做了5年 - 所以最多5)。月薪可以是无限的。

以下是人员表中条目的示例:

FName | LName | FEStart | FEEnd | SF

阿纳金|天行者| 7/1/2017 | 6/30/2019 | 120,000.00

这有点过于简单,因为实际上开始和结束日期是从另一个表中拉出来的,由“人员ID”连接。

请参阅link进行计算。

0 个答案:

没有答案