用于在日期之间查找数据的Vba代码

时间:2015-03-30 22:39:34

标签: vba date

我是VBA的新手,我正在尝试在某个日期之间寻找代价。

我的日期如下:我正在寻找价格

date    ______  Price a _______Price b

2015 03     
2015 04     
2015 05     
2015 06     
2015 07     
2015 08     
2015 10     
2015 11     
2015 12     

在另一个标签上:

period  ____startdate   ____endate  _____price a____   price b

month   ____  2015 03   ____2015 03 ____   10   ____      78

month   ____    2015 04 ____ 2015 04    ____    14  ____ 0

month    ____    2015 05    ____ 2015 05    ____    14  ____       12

month   ____     2015 06    ____ 2015 06    ____    89  ____ 0

month   ____     2015 07    ____ 2015 07    ____    12  ____ 0

month    ____     2015 08   ____ 2015 08     ____   85      ____    12

month   ____    2015 10 ____ 2015 10    ____    88  ____ 0

month    ____     2015 11   ____ 2015 11    ____    21    ____     17

month   ____     2015 12    ____ 2015 12    ____    85  ____ 0

quarter  ____     2015 01   ____ 2015 03    ____    48  ____       45

quarter     ____  2015 04   ____ 2015 06    ____    85  ____ 0

quarter   ____      2015 07 ____   2015 09 ____   85     ____       2

quarter  ____       2015 10 ____ 2015 12    ____     7   ____     17

year      ____      2015 01 ____ 2015 12    ____    17  ____       22

我正在尝试根据以下规则获取价格,具体取决于开始日期和结束日期:

如果价格B#从0到我正在寻找的日期 我将从月份返回价格B和A并停止查看

如果本月价格B = 0,我会看一下季度 如果本季度价格B#从0开始,我将第二次从季度返回价格B和A并停止查看

如果本季度价格B = 0,我会看看这一年 如果从年份0开始的价格B#我将从年份返回价格B和A

如果我要找的日期的价格B不为空,我将第三次从年份返回价格B和A. 我一个星期都在挣扎,不知道怎么弄清楚?

也许是个主意?

非常感谢。

1 个答案:

答案 0 :(得分:0)

好的,这比你想象的要简单,虽然我猜你以前没有遇到INDEX(<Array>, MATCH(<Target Value>, <Array with values>, 0))模式?

如果您能够更改查找页面上的标签,以便每个月,每季度和每年实际上都是唯一的,那么这就足够了 - 因此添加另一个类似IF(a1 = "Quarter", "Q" & choose(month(b1),1,1,1,2,2,2,3,3,3,4,4,4), If(a1 = "Month", "M" & Month(b1), "")) &"_Y" & year(b1)

这可以让您查看结果。然后使用几个索引/匹配公式来查找月份,然后根据需要查看季度,然后查看年份。该公式将基于:

index(<price column you want>,Match("M" & Month(a1) & "_Y" & Year(a1), <Helper column you just added>, 0))

然后,您可以在3列上查找价格B的月份,季度和年份,然后分别在价格a和b的最终结果列中选择要执行的查找,或者您可以嵌套这些公式来执行此操作一枪。如果您有大量数据,辅助列会更快,但这取决于您。