有没有办法让Lookup始终返回列中第一个遇到的匹配?

时间:2013-02-25 20:41:52

标签: excel

我的用户保留数据如下所示:

signup_date days    retention       
2/24/13 0   1
2/23/13 0   1
2/23/13 1   0.4855
2/22/13 0   1
2/22/13 1   0.4727
2/22/13 2   0.3647
2/21/13 0   1
2/21/13 1   0.5135
2/21/13 2   0.3879
2/21/13 3   0.3463
2/20/13 0   1
2/20/13 1   0.5402
2/20/13 2   0.4166
2/20/13 3   0.3615
2/20/13 4   0.3203
2/19/13 0   1
2/19/13 1   0.5317
2/19/13 2   0.4348
2/19/13 3   0.366
2/19/13 4   0.3077

第二列(“天”)表示自注册日期起经过的天数,保留时间基于当天和signup_date(因为保留可能会随时间而变化)。我需要进行预测,不幸的是我(因为我更喜欢以编程方式执行此操作),我的老板想要他们在Excel中。因此,我尝试使用Lookup()函数查找保留列中与某个注册日期过去的“天数”相匹配的最新值。

无论如何,这就是问题的前奏,如果我输入公式,那就是现在:

=lookup(1,B:B,C:C)

其中B:B是“天”而C:C是保留,它不一定返回数据集中的第一个(即最近的)保留值。例如,在这种情况下,我需要单元格为0.4855,但公式可能会给我0.4727(这是第二个“天= 1”行)。是否有任何方法可以将其配置为执行此操作,还是有其他功能可以执行我需要的操作吗?

1 个答案:

答案 0 :(得分:2)

不使用LOOKUP,而是使用VLOOKUP函数 - 它有另一个参数指定数据不按顺序排列:

=VLOOKUP(1,$B:$C,2,0)

这将返回您的范围B:B第二列中的条目,其中" 1"在您的范围的第一列中找到。不要忘记最后的0,因为这会告诉Excel逐行搜索(相对于二分搜索为LOOKUP或省略参数会这样做。)

替代: VLOOKUP是这种情况的简单公式和默认值。更灵活的方法是使用INDEX/MATCH

=INDEX($C:$C,MATCH(1,$B:$B,0))

这将完全相同,只是你有更多的灵活性,并且不需要在查找数据中包含第二列" ...

HTH!