Vlookup并获取最小值(date)

顶部表格是input,底部表格是要求输出的预览。

对于每个ID我需要find最早的date时间。 我还需要其他栏目的其他信息(请参阅下图)。

我目前的解决scheme是:在单元格E2 =A2
单元格E3向下拖动=IF(E2<>A3,IF(E1=A3,"",A3),"")

在单元格F2中向下拖动=IF(E2<>"",MIN(IF($A$2:$A$14=E2,$C$2:$C$14)),"") Ctrl + Shift + Enter

在这里输入图像说明

还有一个选项没有任何中间计算:

  1. select E2 开始的整个范围以及ID所在的最后一行 – 对于给定样本的第14行,select范围E2:E14=IFERROR(INDEX($A$2:$A$14,SMALL(IF(MATCH($A$2:$A$14,$A$2:$A$14,0)=ROW(INDIRECT("1:"&ROWS($A$2:$A$14))),MATCH($A$2:$A$14,$A$2:$A$14,0),""),ROW(INDIRECT("1:"&ROWS($A$2:$A$14))))),"") ,然后按CTRL + SHIFT +通常回车 – 这将定义一个Multicell ARRAY公式,并且会在它周围产生一个花括号{} ,但是不要手动input它们。
  2. F2 (ID2): =IF(E2="","",SUMPRODUCT(--(E2=$A$2:$A$14),--(G2=$C$2:$C$14),$B$2:$B$14)) – 正常的公式。
  3. G2 (Min Date): =IF(E2="","",MIN(IF(E2=$A$2:$A$14,$C$2:$C$14,2^100)))并按下CTRL + SHIFT + ENTER而不是通常的ENTER – 这将定义一个ARRAY公式,并将导致在它周围的括号(但不要手动input!)。
  4. H2 (InCh): =IF(E2="","",INDEX($D$2:$D$14,SUMPRODUCT(--(E2=$A$2:$A$14),--(F2=$B$2:$B$14),--(G2=$C$2:$C$14),ROW(INDIRECT("1:"&ROWS($D$2:$D$14)))))) – 正常公式。

备注:

  • 为了使解决scheme更加紧凑和易于阅读,为ID列定义命名范围,然后使用OFFSET引用其他数据列。
  • ID2值可能不是唯一的 – 因为它们在ID 1...3的样本上。
  • Min Date结果集应格式化为与源Date行相同的方式。
  • 解决scheme的关键公式 – 是多单元怪物,它返回唯一的ID,没有空行 – 如OP请求)

示例文件: https : //www.dropbox.com/s/d2098updfh8djnf/MinDateIDs.xlsx

这是一个相当大的挑战……我想我已经find了一个可行的方法。 为了清楚起见,我使用了一些帮助栏。 此外,我没有使用任何命名的范围,但坚持列行的迹象。 你可能想改变它。

它看起来像这样:

带辅助列的XLS屏幕截图

并放大到相关的列:

新插入的列的屏幕截图

F包含一个数组公式来过滤掉重复项。 这里解释一个方法。 我在F2中使用的公式是

 =INDEX($A$2:$A$14, MATCH(MIN(IF(COUNTIF($F$1:F1,$A$2:$A$14)=0, 1, MAX((COUNTIF($A$2:$A$14, "<"&$A$2:$A$14)+1)*2))*(COUNTIF($A$2:$A$14, "<"&$A$2:$A$14)+1)), COUNTIF($A$2:$A$14, "<"&$A$2:$A$14)+1, 0)) 

使用CtrlShiftEnter确认为数组公式。 将其拖动或复制到列F 。 然后列GH包含重复ID值的开始和结束索引。 这个答案帮助,请upvote它:-)。 使用的两个公式是:

 =MATCH(2,1/FREQUENCY($F2,$A$2:$A$14)) 

G2 ,和

 =FREQUENCY($A$2:$A$14,$F2) 

H2 。 再次拖动它们以填满整个列。 接下来,第一栏只是为了澄清 – 为了理智检查。 它包含每个子数组所需的最短date。 J列将该公式replace为MATCH来查找所需date的实际索引。

 =MIN(OFFSET($C$2:$C$14,$G2-1,0,1+$H2-$G2,1)) 

I2

 =$G2-1+MATCH(2,1/FREQUENCY(MIN(OFFSET($C$2:$C$14,$G2-1,0,1+$H2-$G2,1)), OFFSET($C$2:$C$14,$G2-1,0,1+$H2-$G2,1)) 

J2 。 最后,将列LMN索引到原来的一组数据中

 =INDEX(B$2:B$14,$J2) 

L2 ,你可以水平拖动,然后垂直拖动。

当你完成后,你可以隐藏帮手列,或者把所有东西都放进大公式中。 祝你好运…可能有一个更简单的方法来实现这一点,但我没有find它。

如果你想要G中列D的值,那么假设列C的值是唯一的,你可以使用一个VLOOKUP,即在G2中复制下来

=VLOOKUP(F2,C$2:D$14,2,0)

根据你的照片,他们都在同一张表。 只需按IDsorting,然后按Date (升序)sorting。 当您沿着ID列向下工作时,每当ID改变时,您就知道您已经find了具有该特定ID的最小Date的行。 创build一个额外的列来表示ID更改发生的位置,并筛选这些行(如果您愿意,请隐藏该列)。

而…瞧。

知道这个链接是旧的,但有一个更短,更简单的方法! 如何使用数据透视表使用Minimum as字段设置,然后执行a =GETPIVOTDATA()来获取信息! 看起来这些公式更简单!