无法找到合适的解决方案,因此这篇文章。
有2张 - 出席和出席出勤率以薪资方式填写的薪资单(见样本)。
对于给定的日期范围,我想计算员工的“缺席”天数。下面的非数组公式(在薪资栏“缺席”中)就是这样做的。注意:带有人员ID的A列是动态列表,即使它已在样本中固定。
此公式的工作原理:
注意:无法保证payroll-staffids订单和attendence-header-staffid的顺序相同 - >这就是为什么每个staffid都映射MATCHed和OFFSET。
=COUNTIF(OFFSET(INDIRECT(Settings!$B$13),0,MATCH(A5,Attendance!$B$1:$1,FALSE)),"Absent")
样本表here。
答案 0 :(得分:0)
=ArrayFormula(VLOOKUP(A5:A15, TRANSPOSE({INDIRECT(AttHeader,FALSE);MMULT(TRANSPOSE(SIGN(ROW(INDIRECT(AttUnitMatrix)))),IF(INDIRECT(AttData,FALSE)="Absent",1,0))}),2,FALSE))
请参阅OP中的链接样本表。 对于定义的名称;请参阅“设置”表。所有范围都是单独计算的,以减小公式的大小。
1)开始以“阻止模式”运行,忽略职员ID的顺序。 “AttData”是数据块的字符串表示,如果“Absent”,则映射为1,否则为0。
IF(INDIRECT(AttData,FALSE)="Absent",1,0)
2)此矩阵乘以范围字符串“AttUnitMatrix”中的单位行矩阵
TRANSPOSE(SIGN(ROW(INDIRECT(AttUnitMatrix))))
3)MMULT返回行的“缺席”计数
4){}用于将staff-id前置为2行矩阵的“Absent”计数。
{INDIRECT(AttHeader,FALSE);MMULT(...)}
5)由VLOOKUP(2列矩阵)访问TRANSPOSE结果
6)VLOOKUP通过将key-staff-id与生成的(staff-id / absent-count)对的行矩阵相匹配来处理无序的staff-id。
烟花......拍拍我的背:)
在这种情况下,以及其他人,我已经向Google发送了有关此问题的反馈,这是一个功能请求“命名公式”,类似于“命名范围”,用于标准公式。这是没有诉诸GAS。当公式变大时,这不是奢侈品,而是必需品。如果读者发现此功能有用,请将反馈发送给Google。
eg: UnitMatrix($1) => TRANSPOSE(SIGN(ROW(INDIRECT($1))))
MMULT(UnitMatrix(AttUnitMatrix),IF(INDIRECT(AttData,FALSE)="Absent",1,0))