【问题标题】:Find the Closest match in EXCEL based on multiple criteria根据多个条件在 EXCEL 中查找最接近的匹配项
【发布时间】:2013-06-23 01:58:30
【问题描述】:

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

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

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


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

感谢您的帮助:)

谢谢 房车

【问题讨论】:

  • 我试图找到满足时间和数量条件的记录,然后使用公式“=SMALL(IF(OR(OR(K1-$K$1 :$K$6

标签: excel excel-formula


【解决方案1】:

假设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):

答:=(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。

【讨论】:

  • 谢谢:)。当我使用上述公式时,我得到#NA。你能解释一下这个公式的作用吗
  • 在 A-D 列中使用 sno、价格、数量、日期/时间、第 1 行中的标题和从第 2 行开始的数据,我似乎可以正常工作。我添加了一些额外的细节,我不知道还有什么建议。
  • 谢谢你:)。它对我有用:)..但是如果一条记录有两个匹配的 TIME 值(例如,如果有 2 个或更多匹配的记录在同一时间完全相同,则返回与条件匹配的第一条记录的相应值。我想知道在这种情况下是否有可能获得数量最接近的记录。(如果有两个时间最接近的记录,那么我们需要进一步检查以获取这两个记录中数量最接近的记录记录)。
  • 另外如果我想添加一些额外的条件,比如说我也想检查记录是否也有相同的Sno。如何修改公式?
  • 为了在时间匹配时找到数量最接近的记录,您可以将ABS(D$2:D$7-D2)* 替换为(ABS(D$2:D$7-D2)+ABS(C$2:C$7-C2)*1E-100)*。您可以通过使用 B 部分中的逻辑将不符合条件的任何内容设为否定来添加更多条件,但这将变得笨拙,并且可能更需要 VBA 代码方法。
猜你喜欢
  • 2018-03-01
  • 2018-05-30
  • 2021-06-23
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 2021-03-11
  • 2016-12-24
相关资源
最近更新 更多