我是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. 我一个星期都在挣扎,不知道怎么弄清楚?
也许是个主意?
非常感谢。
答案 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的最终结果列中选择要执行的查找,或者您可以嵌套这些公式来执行此操作一枪。如果您有大量数据,辅助列会更快,但这取决于您。