在最接近指定日期的列表中查找上一个日期

Posted

技术标签:

【中文标题】在最接近指定日期的列表中查找上一个日期【英文标题】:Find a previous date on a list closest to a specified date 【发布时间】:2014-03-12 19:51:48 【问题描述】:

我想要一个 VBA 代码或公式,它们将采用可变日期值并在日期列表范围内找到它。如果它找不到日期,我希望它找到最接近的先前日期值。 VLOOKUP 非常适合查找精确匹配,但我正在努力寻找最接近的前一个日期。

我唯一的想法是创建一个循环,如果它不匹配,它会继续从变量 date 中减去一天,直到它可以在列表中找到匹配项。这似乎不是最好或最有效的方法,我希望有人可以推荐一个更简单的解决方案。

例子:

Variable Date = 01/26/2014

Date List
02/04/2014
01/27/2014
01/24/2014
01/13/2014
12/29/2013

Desired Result = 01/24/2014

任何帮助将不胜感激。

【问题讨论】:

你可以使用MATCH函数,match_type参数等于1:If match_type is 1, MATCH finds the largest value that is less than or equal to lookup_value. Lookup_array must be placed in ascending order 如果它被订购它更容易使用查找 【参考方案1】:

我做的有点不同,不需要数组 使用CountIf() 查找比您要查找的数字更大的数字 然后我使用了=Large,这将在列表中找到第n个日期,我们在countIF()中寻找第n个日期

=LARGE(A:A,COUNTIF(A:A,">="&TODAY()))

【讨论】:

【参考方案2】:

假设您的日期列表在单元格A1:A5 中并且您的检查日期在单元格C1 中,您可以输入此函数以数组公式的形式输入:

=MAX(($A$1:$A$5<=C1)*A1:A5)

记住,要将其作为数组公式输入,请在输入公式时点击 Ctrl + Shift + Enter .

希望这能解决问题!

【讨论】:

@John Bustos - 在这个线程上提问可能为时已晚,但我希望通过 vba 计算公式。我试过 'prev_date = Application.Max((Date_Array @JohnW,在 VBA 中,我会做一个快速的 for 循环并继续写最大的 &lt;= 变量,直到你遍历整个数组......我认为那将是最有效的方法...如果您愿意,请发布另一个问题,如果您无法从我的描述中解决,我会给您代码....【参考方案3】:

如果您将最终参数设置为true,Vlookup 实际上可以做到这一点,它会寻找近似匹配。您需要将日期从最旧到最新排序,它将返回不在您的搜索词之后的第一个日期。

【讨论】:

以上是关于在最接近指定日期的列表中查找上一个日期的主要内容,如果未能解决你的问题,请参考以下文章

使用大数据集Mysql在两组日期中查找最接近的较低日期

SQL - 查找最接近当前日期的日期

SQL Server 查找接近服务日期和月份的行

如何从日期范围查询中查找表中的一组缺失日期

从日期列表中查找最小日期值

Mysql生成任意指定两时间范围内的日期列表