在excel或vba中查找值

Column A Column B 13-06-2013 10:50 13-06-2013 11:30 13-06-2013 12:40 14-06-2013 10:30 

我需要find特定的inputdate和时间之前的值。

例如,假设我想在上面的示例表中find值“13-06-2013”​​和“12:30”之前的值。

由于12:30不在列B,我怎么find我正在寻找的价值? 答案应该是13-06-2013和11:30。

 C7 =VLOOKUP(A7&B7,A1:C4,3,TRUE) 

这里A1 = B1&C1

  ABC 1 414380.451388888888889 13-06-2013 10:50 2 414380.479166666666667 13-06-2013 11:30 3 414380.527777777777778 13-06-2013 12:40 4 414390.4375 14-06-2013 10:30 5 6 Enter date Enter Time Returned Time 7 13-06-2013 12:30 11:30:00 

如果精确值不可用,那么将'range_lookup'设置为'True'可以灵活地返回最接近的近似值。

我想你正在寻找这样的事情。 使用索引和匹配。

我没有考虑到现在的date。 但是这给你一个例子。

在这里输入图像描述

您可以将datestring与运算符(如><等)进行比较。将列A和B中的值连接起来,与所需的date/时间string进行比较。 在单元格C1input以下公式,然后向下拖动:

="13-06-2013 12:30"<A1&" "&B1

或者更具体地说,取决于你想要的“上午12点30分”(AM或PM), ="13-06-2013 12:30AM"="13-06-2013 12:30PM"

截图

B列中的数据可能默认为AM,除非另行指定/导入的数据不同,因此您可能需要调整数据或对此进行解释。

这里是另一种回答你的问题的方法,它使用MATCH,INDEX和数组操作的组合来提供不依赖于辅助列的紧凑的公式解决scheme。

我假定你的两列date和时间在单元格A2:B5 ,而你想要查找的两个date和时间值在单元格A9:A10 。 然后,以下两个公式将返回您所需的数据中最新的date和时间值,这些值小于或等于您查找的date和时间。 (公式中的美元符号在眼睛上很难看,但如果您需要将公式复制到其他位置,则这些符号很重要;为了清楚起见,我在后面的讨论中省略了它们。

  date:= INDEX($ A $ 2:$ B $ 5,MATCH(A9 + A10,$ A $ 2:$ A $ 5 + $ B $ 2:$ B $ 5,1),1) - > 13-06-2013
   TIME:= INDEX($ A $ 2:$ B $ 5,MATCH(A9 + A10,$ A $ 2:$ A $ 5 + $ B $ 2:$ B $ 5,1),2) - > 11:30 AM

这些是数组公式,需要用ControlShiftEnter组合 input 。 (当然,只有以等号(=)开始,以最后一个括号结束的位需要input到工作表中。)

需要考虑的事项:

  • 公式假定您的数据是有效的Exceldate和时间值。 Exceldate值是计算自1900年1月1日以来经过的天数的整数; Excel时间值是介于0和1之间的十进制数,表示特定时间所代表的24小时分数。 尽pipe您的示例数据不显示AM或PM,但我认为其基础值确实具有该信息。

  • 如果您的值是文本(例如从其他来源导入),则应使用Excel的DATEVALUETIMEVALUE函数将它们转换为date/时间值(如果幸运的话)。 如果不是那么幸运,也可以使用Excel的string操作函数的组合。 (这些值可以保存为string,但是您几乎可以肯定需要对它们进行按摩,以便按照“按字母顺序”进行正确比较 – 仅处理Exceldate/时间值就容易得多。

  • 如果他们还没有,你的date和时间将需要从最小到最大sorting。 (你的示例看起来像是被sorting的,公式假定的也是一样。)

包含公式和结果的示例工作表

公式如何工作

公式背后的基本思想有两个方面:首先在数据中查找包含最新(最大)date和时间的行,该date和时间仍小于或等于您查找的date和时间。 然后可以使用该行信息从数据范围的每一列(一个用于date,一个用于时间)获取最终结果。

由于date和时间都是最新的,所以要查找的值和要查找的值的date和时间分量必须以某种方式组合。

这可以通过简单地将date和时间一起添加来实现。 这只不过是Excel所做的事:Exceldate/时间值具有整数部分(自1/1/1900以来的天数)和小数部分(特定时间表示的24小时的小数部分)。

这里整洁的是,date和时间的累加 – 以及特定date和时间的查找 – 可以一次完成,即时完成。

看一看MATCH :将包含date和时间的单元格( A9A10 )加在一起,然后将这个总和与date列( A2:A5 )和时间列( B2:B5 ) – Excel的数组运算能力。 该匹配返回值为2,正确指出填写要求的date和时间在数据表的第2行。

     date/时间匹配:=匹配(A9 + A10,A2:A5 + B2:B5,1) - > 2

作为MATCH函数的最后一个参数的1是匹配结果被计算为小于或等于要查看的值的指令。 这是默认值,通常会被忽略,或者被replace为另一个值(例如,使用值0会产生完全匹配,如果有的话)。

(为了便于阅读,我已经删除了完整公式中的美元符号;这些定位了一个范围,以便即使将公式复制到另一个位置,它也保持不变。

已经找出行看,其余的公式是直截了当的。 INDEX函数返回位于指定行和列的交集处的数据范围中的值。 所以,在这个date,公式简化为:

      DATE FETCH:= INDEX(A2:B5,2,1) - > 13-06-2013

换句话说,INDEX是返回数据范围A2:B5第二行第一列的值。

时间公式以完全相同的方式进行,唯一不同的是该值从数据范围的第二列返回。