如何找到第n个最相似的值

时间:2016-03-22 17:23:12

标签: excel

目标是找到两个最相似的运营日,并返回生产测量的平均值。这将有助于未来的运营规划。

所以我有一份过去90天的设施及其运营数据清单。因此每个设施每天将有一排。此信息在其自己的工作表上,并从基于Excel的查询中提取。所以基本上这个标签" PDA"列有" Facility"," Date"和" Total Output"。

在第二个标签上," Analyzer",我有类似的设置。但它的未来日期。我想做的是采取" CPWTotal" (未来日期的总产出)并从" PDA"中找到两个最相似的日子。选项卡并返回这两个"总输出"。我尝试使用索引(小)和最小(绝对)函数的混搭来找到最小的差异,但它并没有像我希望的那样工作。

以下是我最接近的,但与建筑物编号的比较是一个主要的问题。

PDA!AB包含历史输出数据,PDA!W包含历史数据建筑物编号,A3包含未来计划建筑物编号,C3包含未来输出预测。

{=INDEX(PDA!$AB$2:$AB$10000,MATCH(($A3 = PDA!$W$2:$W$10000)*MIN(ABS(PDA!$AB$2:$AB$10000-$C3)),ABS(PDA!$AB$2:$AB$10000-$C3),0))}

我知道()* Min()部分可能会绊倒我,但我的逻辑是如果建筑物编号不匹配则为0 * Min(),因此为该行返回0匹配,我还没有找到更好的方法。

这不是最后一步,但我需要设置索引(匹配)以拉出我需要平均的其余操作数据。

我也对VBA解决方案持开放态度。

编辑:示例数据:

选项卡1:PDA返回(我希望返回输出的工作表)1和2是将返回最接近和第二近似匹配的列。

Bulding#2016 CPW Forecast 1 2

4505 29-Feb-16 1789
4505 01-Mar-16 2270
4505 02-Mar-16 2108
4505 03-Mar-16 2028
4505 04-Mar-16 1912
4600 29-Feb-16 1653 4600 01-Mar-16 2264
4600 02-Mar-16 2232
4600 03-Mar-16 2013
4600 04-Mar-16 1876
4650 29-Feb-16 1799
4650 01-Mar-16 2254
4650 02-Mar-16 2181
4650 03年3月3日至16日 4650 04-Mar-16 1910

Tab 2(PDA)包含我要搜索的信息:

建筑#2016 CPW总产量

4505 29-Feb-16 1799
4505 01-Mar-16 2250
4505 02-Mar-16 2118
4505 03-Mar-16 2025
45014 04-Mar-16 1914
4600 29-Feb-16 1654
4600 01-Mar-16 2262
4600 02-Mar-16 2231
4600 03-Mar-16 2016
4600 04-Mar-16 1826
4650 29-Feb-16 1789
4650 01-Mar-16 2244
4650 02-Mar-16 2161
4650 03-Mar-16 1912
4650 04-Mar-16 1920

我不知道如何上传示例excel文件,但您应该能够复制/粘贴这些表格。

1 个答案:

答案 0 :(得分:0)

你将不得不两次使用伪MINIFS;一次返回最小天差,再次返回第一个匹配的行号。

  

出于动态范围分配的目的,以下将通过AB列中最后一个日期的行号定义每个范围的范围。范围PDA!W$2:W$14变为

PDA!W$2:INDEX(PDA!W:W, MATCH(1E+99, PDA!AB:AB))
     

所有范围都将以这种方式定义。完整列引用应AGGREGATE function一起使用。数据的添加和删除将自动调整为

Standard Formula

D3中的标准公式是

=INDEX(PDA!$AC:$AC,
       AGGREGATE(15, 6, ROW(PDA!AC$2:INDEX(PDA!AC:AC, MATCH(1E+99, PDA!AB:AB )))/
     ((PDA!W$2:INDEX(PDA!W:W, MATCH(1E+99, PDA!AB:AB ))=A$3)*
      (ABS(PDA!AB$2:INDEX(PDA!AB:AB, MATCH(1E+99, PDA!AB:AB))-C$3)=
       AGGREGATE(15,6,ABS(PDA!AB$2:INDEX(PDA!AB:AB, MATCH(1E+99, PDA!AB:AB ))-C$3)/
      (PDA!W$2:INDEX(PDA!W:W, MATCH(1E+99, PDA!AB:AB ))=A$3),1))),ROW(1:1)))

返回第一场比赛。如果存在,请填写第二,第三等比赛。

来自[excel-2010]解决方案的

enter image description here
Sample data