2013-02-28 805 views
5

TOP表是输入,底部表是预览所需输出。Vlookup并获取最小值(日期)

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

我目前的解决方案是: 在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键

enter image description here

+0

'我还需要来自其他栏目的其他信息 - 请更具体。并根据屏幕..在表单上有许多单独的表格? – 2013-02-28 20:03:42

+0

对不起,我的意思是。对于每个ID(A)我需要在列(C)中找到最早的日期我还需要B&D的其他信息 – Mowgli 2013-02-28 20:05:36

+0

再一次:在您的示例中,我们有两个ID为9的表。因此,对于每个表表是必需的? – 2013-02-28 20:12:06

回答

8

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

  1. 选择整个范围开始E2和最后一排,其中的ID所在 - 为样本给它的第14行,因此选择范围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 + ENTER 代替通常的ENTER - 这将定义一个多节ARRAY公式并将导致围绕它的曲线{}(但请不要手动输入它们!)。
  2. F2(ID2):=IF(E2="","",SUMPRODUCT(--(E2=$A$2:$A$14),--(G2=$C$2:$C$14),$B$2:$B$14)) - 正常配方。
  3. G2(敏时间):=IF(E2="","",MIN(IF(E2=$A$2:$A$14,$C$2:$C$14,2^100)))并按CTRL + SHIFT + ENTER,而不是通常的ENTER - 这将定义一个ARRAY公式,并会导致它周围的花{}括号(但千万不是手动输入!)。
  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)))))) - 正常配方。

备注:

  • 为了使溶液更紧凑和易于阅读,定义命名范围ID柱,然后引用使用OFFSET其它数据列。
  • ID2值可能不唯一 - 因为它们在ID为1...3的样本上。
  • 生成的Min Date的设置应该与源Date行的格式相同。
  • 的解决方案的主要公式 - 是多细胞怪物返回唯一的ID不空行 - 为OP要求)

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

+0

+1工作样本和没有中间体的干净解决方案 – Ksenia 2013-03-01 20:19:46

+0

非常感谢您的辛勤工作....我只是开始看你的工作簿..我有问题。我正在尝试在'E'列中编辑公式,它引发了我无法更改数组任何部分的错误。 – Mowgli 2013-03-01 20:40:45

+2

@Mowgli这是预期的**多单元**阵列公式 - 如上所述。编辑它,你应该选择这个公式使用的整个范围。 – 2013-03-01 20:46:21

0

根据您的图片,他们'都在同一张纸上。只需按ID排序,然后按Date(升序)排序。当您沿着ID列纵向行进时,每当ID发生变化时,您都会发现该行的最小值为Date,该值为该特定值的ID。创建一个额外的列来表示发生更改的位置,并筛选这些行(如果您愿意,请隐藏该列)。

And ... voila。

1

如果你想从列d G中值,则假设C列值是唯一的,你可以只使用VLOOKUP,即G2抄下来

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

2

这是相当大的挑战..我认为我找到了一种可行的方法。为了清楚起见,我使用了一些帮助栏。另外,我没有使用任何命名的范围,但坚持列行指示。你可能想改变它。

它看起来像这样:

Screenshot of XLS with helper columns

和到相关列缩放:

Screenshot of the newly inserted columns

F包含数组式过滤掉重复。一种方法解释为here。我在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)) 

使用Ctrl键 - - 输入确认作为阵列式。将其拖动或复制到列F。然后列GH包含重复ID值的起始和结束索引。 This answer帮助,请upvote它:-)。用这两个公式是:

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

G2

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

。再次拖动它们以填满整个列。接下来,第I列仅用于澄清 - 并用于完整性检查。它包含每个子阵列所需的最短日期。列J将该公式替换为MATCH以查找所需日期的实际索引。

=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

。最后,列LM并通过

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

,您可以水平然后垂直拖动N指数为原始数据集。

完成后,您可以隐藏辅助列或将所有内容都折叠成大公式。祝你好运...可能有一个更简单的方法来实现这一点,但我没有找到它。

+0

嗨,请您上传您的工作簿副本吗? – Mowgli 2013-03-01 13:21:40

+0

我在这里上传了它:http://temp-share.com/show/Pf3Yq8tK2。或者让我知道一个更好的地方来放置它。 – 2013-03-01 13:30:21

+0

谢谢,我现在正在查看你的文件,你可以看看我的文件,看看我是否可以做第2步,只是跳过第1步。这个文件将更有意义,我正在尝试做什么。 http://temp-share.com/show/f3Ygubvdn – Mowgli 2013-03-01 13:34:13

0

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