顶部表格是输入,底部表格是所需输出的预览。
对于每个 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
顶部表格是输入,底部表格是所需输出的预览。
对于每个 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
无需任何中间计算的另一种选择:
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公式并{}
在其周围产生大括号(但不要手动输入它们!)。F2
(ID2): =IF(E2="","",SUMPRODUCT(--(E2=$A$2:$A$14),--(G2=$C$2:$C$14),$B$2:$B$14))
- 正常公式。G2
(最小日期):=IF(E2="","",MIN(IF(E2=$A$2:$A$14,$C$2:$C$14,2^100)))
然后按CTRL+ SHIFT+ENTER而不是通常的ENTER- 这将定义一个ARRAY公式,并{}
在它周围产生花括号(但不要手动输入它们!)。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
.1...3
。Min Date
格式应与源Date
行相同。示例文件:https ://www.dropbox.com/s/d2098updfh8djnf/MinDateIDs.xlsx
这是一个相当大的挑战……我想我找到了一种可行的方法。为了清楚起见,我使用了一些辅助列。此外,我没有使用任何命名范围,而是坚持使用列行指示。你可能想改变它。
它看起来像这样:
并放大到相关列:
列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
中。然后是列G
并H
包含重复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
最后,columnsM
和N
index 通过
=INDEX(B$2:B$14,$J2)
in L2
,您可以水平拖动,然后垂直拖动。
完成后,您可以隐藏帮助列,或将所有内容折叠成大公式。祝你好运......可能有一种更简单的方法可以实现这一点,但我没有找到它。
如果您想要 G 中 D 列的值,那么假设 C 列的值是唯一的,您可以只使用 VLOOKUP,即在 G2 中复制下来
=VLOOKUP(F2,C$2:D$14,2,0)
根据你的照片,它们都在同一张纸上。只需按ID
,然后Date
(升序)排序。当您沿着ID
列向下移动时,每次ID
更改时,您都知道您已经找到了Date
该特定ID
. 创建一个额外的列来表示ID
更改发生的位置,并过滤这些行(如果您愿意,可以隐藏该列)。
还有……瞧。
知道这个链接是旧的,但是有一个更短更简单的方法!如何使用使用“最小值”作为字段设置的数据透视表,然后执行 a=GETPIVOTDATA()
以获取信息!这些公式似乎要简单得多!
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.