5

顶部表格是输入,底部表格是所需输出的预览。

对于每个 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

在此处输入图像描述

4

6 回答 6

8

无需任何中间计算的另一种选择:

  1. 选择从 ID 所在的最后一行开始到最后一行的整个范围 E2- 对于第 14 行的示例,因此选择 range 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- 这将定义一个Multicell 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

于 2013-03-01T18:06:32.343 回答
2

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

它看起来像这样:

带有辅助列的 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))

使用Ctrl- Shift-Enter确认为数组公式。将其向下拖动或复制到列F中。然后是列GH包含重复ID值的开始和结束索引。这个答案有帮助,请投赞成票:-)。使用的两个公式是:

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

G2, 和

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

H2. 再次,将它们向下拖动以填充整列。接下来,列I仅用于澄清 - 并用于完整性检查。它包含每个子数组中所需的最小日期。ColumnJ将该公式替换为 aMATCH以查找所需日期的实际索引。

=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. L最后,columnsMNindex 通过

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

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

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

于 2013-03-01T12:31:57.207 回答
1

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

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

于 2013-02-28T21:24:18.203 回答
0

根据你的照片,它们都在同一张纸上。只需按ID,然后Date(升序)排序。当您沿着ID列向下移动时,每次ID更改时,您都知道您已经找到了Date该特定ID. 创建一个额外的列来表示ID更改发生的位置,并过滤这些行(如果您愿意,可以隐藏该列)。

还有……瞧。

于 2013-02-28T20:53:26.660 回答
0

知道这个链接是旧的,但是有一个更短更简单的方法!如何使用使用“最小值”作为字段设置的数据透视表,然后执行 a=GETPIVOTDATA()以获取信息!这些公式似乎要简单得多!

于 2014-07-21T19:48:48.007 回答
0

Actually, I just realized I've been overthinking this...Excel keeps the top item and removes all that follow when removing duplicates. So if you are going to create an extra working table anyway, why not just copy the range/columns you want to keep, then use the basic sort. Sort first by ID, then by the column you want as the second filter. Be sure the sorts are in the order you want (e.g. newest to oldest, oldest to newest, A to Z, Largest to smallest, etc). Once the data is sorted, remove duplicates based on ID. You are left with all of your columns of data, filtered by newest/oldest/largest/smallest per individual. This worked for my table with 30,000+ records, filtered down to 1500 unique individuals with most recent (plus associated amount), and with a second filter, the largest (plus associated date) for each person.

于 2018-06-27T23:03:41.197 回答