TOP表是输入,下表是所需输出的预览。
对于每个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
答案 0 :(得分:8)
没有任何中间计算的另一个选项:
E2
以及ID所在的最后一行 - 对于给定第14行的示例,请选择范围E2:E14
:{{1并按 CTRL + SHIFT + ENTER 而不是通常的 ENTER - 这将定义 Multicell ARRAY 公式并会在其周围生成卷曲的=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))))),"")
括号(但 NOT 会手动输入它们!)。{}
(ID2):F2
- 正常公式。=IF(E2="","",SUMPRODUCT(--(E2=$A$2:$A$14),--(G2=$C$2:$C$14),$B$2:$B$14))
(最短日期):G2
并按 CTRL + SHIFT + ENTER 而非常规< kbd> ENTER - 这将定义 ARRAY 公式,并在其周围生成大括号=IF(E2="","",MIN(IF(E2=$A$2:$A$14,$C$2:$C$14,2^100)))
括号(但 NOT 手动输入它们!) {}
(InCh):H2
- 正常公式。说明:
=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
行的格式相同。示例文件:https://www.dropbox.com/s/d2098updfh8djnf/MinDateIDs.xlsx
答案 1 :(得分:2)
这是一个相当大的挑战......我想我找到了一种有效的方法。为了清楚起见,我使用了一些辅助列。此外,我没有使用任何命名范围,但坚持列行指示。你可能想改变它。
看起来像这样:
并放大相关列:
列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 - Shift - 输入确认为数组公式。将其向下拖动或复制到列F
中。然后,列G
和H
包含重复ID
值的起始和结束索引。 This answer有帮助,请提升它:-)。使用的两个公式是:
=MATCH(2,1/FREQUENCY($F2,$A$2:$A$14))
<{1>}中的和
G2
=FREQUENCY($A$2:$A$14,$F2)
中的。再次,将它们向下拖动以填充完整的列。接下来,列H2
仅用于说明 - 并用于完整性检查。它包含每个子阵列所需的最小日期。列I
将该公式替换为J
以查找所需日期的实际索引。
MATCH
<{1>}和中的
=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
列通过
M
N
中的,您可以水平拖动然后垂直拖动。
完成后,您可以隐藏辅助列,或将所有内容折叠成大型公式。祝你好运......可能有一种更简单的方法来实现这一目标,但我没有找到它。
答案 2 :(得分:1)
如果您想要G中D列的值,那么假设C列值是唯一的,您可以使用VLOOKUP,即在G2中复制
=VLOOKUP(F2,C$2:D$14,2,0)
答案 3 :(得分:0)
根据你的照片,它们都在同一张纸上。只需按ID
排序,然后排序Date
(升序)。当您沿着ID
列向下移动时,每次ID
更改时,您都知道您找到了该特定Date
的最小ID
行。创建一个额外的列以表示发生ID
更改的位置,并过滤这些行(如果您愿意,请隐藏该列)。
而且......瞧。
答案 4 :(得分:0)
知道这个链接是旧的,但有一个更短更简单的方法!
如何使用最小为字段设置使用数据透视表,然后执行=GETPIVOTDATA()
以获取信息!
看起来像这些公式简单得多!
答案 5 :(得分:0)
实际上,我只是意识到我一直在考虑这个问题……Excel保留了最重要的内容,并在删除重复项时删除了所有后续内容。 因此,如果仍然要创建一个额外的工作表,为什么不只复制要保留的范围/列,然后使用基本排序。 首先按ID排序,然后按要作为第二个过滤器的列排序。确保排序按照您想要的顺序进行(例如,从最新到最旧,从最旧到最新,从A到Z,从最大到最小等)。 数据排序后,根据ID删除重复项。您将剩下所有数据列,并按每个人的最新/最旧/最大/最小过滤。 这适用于我的表格,具有30,000多个记录,可以过滤掉1500个唯一的具有最新(加上相关数量)的个人,并具有第二个过滤器,每个人最大(加上相关的日期)。