vlookup:lookup_value作为日期范围

时间:2013-07-15 10:22:18

标签: excel date-range vlookup

以下情况:

工作表1提供了两个单元格中的日期范围:

Beginning____End

1.2013______2.2013

2.2013______3.2013...

表2提供了具体的日期和值

3.1.2013_____500$

5.2.2013_____700$...

我现在要做的是在工作表1的右侧日期范围旁边插入工作表2中的值。请注意,每个日期范围只有一个日期(因此只有一个值)。

1.2013___ 2.2013___500$

2.2013___ 3.2013___700$

通常在这种情况下我会使用Vlookup并匹配日期,但这不起作用,因为我必须将值范围作为lookup_value。

我非常感谢你的帮助。这个问题似乎很容易,但我似乎无法找到解决方案!我试图为我在这里和其他网站上发现的类似问题应用一些解决方案,但我还没有找到解决方案。

谢谢和最诚挚的问候!

2 个答案:

答案 0 :(得分:1)

我不确定是否有替代方案,但这就是我提出的方法:

=IF(VLOOKUP(C3,Sheet1!$B$3:$C$11,1)>=B3,VLOOKUP(C3,Sheet1!$B$3:$C$11,2),0)

首先要注意的是,你有一个'浮动'或未锚定的范围,这导致你的LOOKUP()稍微有效,但这最终会导致很多错误的值。

对于公式,这里有一点描述:

VLOOKUP(C4,Sheet1!$B$3:$C$11,1)>=B4这会检查End of Period是否等于我们正在寻找的Sheet1中的日期或之前。在月份跳过的情况下,这一点就是照顾它的。

VLOOKUP(C3,Sheet1!$B$3:$C$11,2)这会查找相应的日期值。

我更新了您的文件here

答案 1 :(得分:0)

只要Sheet2上的日期按升序排列,您仍然可以使用VLOOKUP。如果您查看VLOOKUP的帮助,您将看到如果省略range_lookup参数或TRUE,则该函数将匹配等于搜索值的第一个值或最小值。比搜索值。因此,在您的示例中,如果Sheet1上的单元格B2包含2.2013,则VLOOKUP(Sheet1!B2, Sheet2!$A$1:$B2)将返回500,因为3.1.2013是搜索列中的最后一个小于搜索值的值(Excel处理month.year日期值等于1.month.year)。

如果每个月在Sheet2上有始终值 - 例如它从未从5.2.2013跳到例如7.4.2013 - 那么VLOOKUP本身就应该做你需要的。如果Sheet2上有时缺少月份,则需要限制VLOOKUP函数的搜索范围,以防止(在此示例中)结束日期4.2013返回5.2.2013值。您可以使用OFFSET和MATCH函数为VLOOKUP的table_array构建一个范围,该范围从您要查找的日期范围的开头开始。在MATCH函数中使用match_type参数1,使其行为方式与VLOOKUP相同。