答案1
我的解决方案
首先,保持你的列按升序排列A
。B
然后,假设第 1 行是标题行,设置
C2
到=IF(NOT(A2=A1),ROW(),0)
;
D2
到=IF(AND(NOT(C2=C1),NOT(C2=0)),CONCATENATE("B",TEXT(C2,"0")),D1)
;
E2
到=IF(NOT(A3=A2),ROW(),0)
;
F2
到=IF(AND(NOT(E2=E1),NOT(E2=0)),CONCATENATE("B",TEXT(E2,"0")),F3)
;
最后,G2
。=INDIRECT(F2)-INDIRECT(D2)
自动填充列C
直到G
最后一行,您将获得单元格 Gx 中根 Ax 的生命周期。
以下是包含示例数据的输出:
解释
对前两列进行排序,确保数据按根分组,并且每组中的最后一个数据减去第一个数据就是该根的生命周期。
使用两个补充列(C 和 D)来查找第一个数据的单元格索引,使用另外两个补充列来查找最后一个数据的索引。
诀窍在于,每次您观察到 A 列的值发生变化时,您就知道一个数据组已经结束并且一个新的数据组开始了。
用单元格索引填充 D 列和 F 列后,使用 INDIRECT 函数获取相应的值并减去它们。
参考
答案2
一般而言,人们可能期望测量天数和测量次数不是对于每个根组都相同。当天数和测量次数发生变化时,以下公式会给出正确的结果。
=IF(A2<>A3,MAX(IF(A:A=A2,B:B,FALSE))-MIN(IF(A:A=A2,B:B,FALSE)),"")
CTRL这是一个数组公式,必须在 C2 中用+ Shift+输入Enter,而不是直接输入Enter。输入后,单击 C2 并向下填充数据到最后一行。下表显示结果:
工作原理:内部表达式IF(A:A=A2,B:B,FALSE)
返回 B 列中的值数组,其中 A 列 = An(当前行中的特定 R 名称),其他所有列都为 FALSE。因此,一年中的天数对于每个 R 名称都是独立的,无论它们是什么,也无论有多少。然后通过从该数组的最大值中减去最小值来计算寿命。
外部 IF() 将 Life 计算放在一组 R 名称的末尾,其余位置留空。
希望这会有所帮助,祝你好运。
答案3
答案4
@Dunois,我想提出两个解决方案。第一个与之前的帖子有关,第二个是即兴的。
解决方案 1:
关于之前的帖子,您的问题是该公式是否适用于可变长度数据?
是的,它会起作用。查看屏幕截图Root3 有 7 行公式只需拖到长度即可,即
=IF($A201<>$A200,(MAX(B$200:B200)-MIN(B$200:B200)),"")
注意:数据范围是A200 至 C218(不包括标题行)。公式单元格是C200. 根据需要调整数据范围。
解决方案 2:
这是即兴的。为此,需要对数据范围进行排序并应用 Group 命令,最后使用以下公式。
=IF(F200="",MAX(G200:INDEX(G$199:G199,MATCH(2,1/(G$199:$G199=""),1)))-MIN(G200:INDEX(G$199:G199,MATCH(2,1/(G$199:$G199=""),1))),"")
注意:数据范围为F200 至 H218(不包括标题行)。公式位于单元格中H200。
还,我故意把航向从 G199 取消了。
如果您想避免这种情况,请将标题写在第 199 行,并从第 201 行开始第一个条目,并且不要忘记更改公式中的单元格地址。
根据需要调整数据范围。