LibreOffice/OpenOffice Calc:统计每组中存在有效工作时长的子组数量
LibreOffice/OpenOffice Calc:统计每组中存在有效工作时长的子组数量
嘿,我完全懂你被迫切换到Calc的心情——毕竟用惯了Excel突然换工具确实闹心😅不过你的这个统计需求,其实有个优雅又能直接下拉的解法,不用堆砌一堆嵌套函数,来看看:
核心思路
我们要做的是:对每个组,检查它的每个子组对应的C到AF列里,是否存在至少一个大于0的工作时长;只要有一个,这个子组就算“有效”,最后把同组的有效子组数量加起来。
可直接下拉的公式
假设你的数据从第2行开始(第1行是表头),你可以在空白列(比如AG列)的AG2单元格里输入这个公式:
=SUMPRODUCT(($A$2:$A$100=A2)*(--(MMULT(--($C$2:$AF$100>0),ROW($C$1:$AF$1)^0)>0)))
输入完成后直接下拉公式,每一行都会自动算出对应组的有效子组数量。
公式简单拆解(怕你好奇原理)
$A$2:$A$100=A2:筛选出当前行所在组的所有数据行,返回一组布尔值(TRUE/FALSE)--($C$2:$AF$100>0):把C到AF列里大于0的单元格转成1,小于等于0的转成0(--是把布尔值快速转成数值的小技巧)MMULT(...,ROW($C$1:$AF$1)^0):用矩阵乘法对每一行(每个子组)的1求和,只要该子组有一个大于0的时长,结果就会大于0--(...)>0:把上面的求和结果转成1(有效子组)或0(无效子组)- 最后
SUMPRODUCT把同一组的这些1和0相加,就得到了该组的有效子组总数
小提示
记得把公式里的$A$2:$A$100和$C$2:$AF$100改成你实际的数据范围哦——比如你的数据到第500行,就换成$A$2:$A$500和$C$2:$AF$500,这样才会覆盖所有数据~
备注:内容来源于stack exchange,提问作者Greg_em
相关产品推荐
相关产品推荐

