0

请在下面找到我的问题陈述:

要求:对于下面显示的记录中的每一行,我想找到10分钟范围内和数量+-15个单位内的记录。然后找到与当前记录在时间上最接近的记录并获取价格值。

示例:假设第一条 Sno=1 的记录,在 10 分钟时间范围内和 +-15 个数量单位内的记录是 Sno = 2,4,6 的记录。在这三个记录中,时间范围内最接近的一个是记录 Sno=2。所以我想获得 Sno=2 记录的价格值,即 12。


  • Sno 价格 数量 时间
  • 1 10 100 2013 年 5 月 8 日上午 10:12:13
  • 2 12 111 05/08/2013 上午 10:10:11
  • 3 13 123 05/08/2013 上午 10:22:13
  • 4 2 111 2013 年 5 月 8 日上午 10:22:13
  • 5 13 112 2013 年 5 月 8 日上午 10:42:13
  • 6 14 100 2013 年 5 月 8 日上午 10:15:13

感谢你的帮助 :)

谢谢 RVK

4

1 回答 1

2

假设数据在A2:D7,输入E2并填写:

=LOOKUP(2,1/(ABS(D$2:D$7-D2)<TIME(,10,1))/FREQUENCY(0,ABS(D$2:D$7-D2)*(2*(ABS(C$2:C$7-C2)<=15)-1)-(A$2:A$7=A2)),B$2:B$7)

解释

公式可以分解为几个部分(通过在公式栏中突出显示所选部分并按 F9):

A:=(ABS(D$2:D$7-D2)<TIME(0,10,1))返回{TRUE;TRUE;TRUE;TRUE;FALSE;TRUE}这是一个数组,指示它是否在 10 分钟内(或10:01考虑四舍五入)

B:=FREQUENCY(0,{...})返回{0;1;0;0;0;0;0}15个单位数量内最接近的时间匹配。ABS(D$2:D$7-D2)*(2*(ABS(C$2:C$7-C2)<=15)-1)返回一个时间差数组,如果乘积在 15 个单位以内,则为正数,否则-(A$2:A$7=A2)为负数,相加后为当前行返回负数。第一个参数为零,频率函数将忽略这些负数。

C: =LOOKUP(2,1/A/B,B$2:B$7)返回对应的匹配项,其中 A 和 B 均为 1 或 TRUE。倒数用于 LOOKUP 忽略错误,如果找不到匹配项,LOOKUP 将返回 #N/A。

于 2013-06-22T08:54:29.113 回答