在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进行比较。 在单元格C1
input以下公式,然后向下拖动:
="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
这些是数组公式,需要用Control – Shift – Enter组合键 input 。 (当然,只有以等号(=)开始,以最后一个括号结束的位需要input到工作表中。)
需要考虑的事项:
-
公式假定您的数据是有效的Exceldate和时间值。 Exceldate值是计算自1900年1月1日以来经过的天数的整数; Excel时间值是介于0和1之间的十进制数,表示特定时间所代表的24小时分数。 尽pipe您的示例数据不显示AM或PM,但我认为其基础值确实具有该信息。
-
如果您的值是文本(例如从其他来源导入),则应使用Excel的
DATEVALUE
和TIMEVALUE
函数将它们转换为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和时间的单元格( A9
和A10
)加在一起,然后将这个总和与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
第二行第一列的值。
时间公式以完全相同的方式进行,唯一不同的是该值从数据范围的第二列返回。