ArrayFormula 和 SUMPRODUCT 中的扩展范围

ArrayFormula and expanding range in SUMPRODUCT

我想在 Google 表单报告中创建一个跟踪号。这将是一个数组公式,用于计算事件数并按年、月和按类型(第 N 行)对其进行计数。在大多数情况下,我已经创建了公式,但它只有在向下拖动时才有效,因为公式中的范围是动态的。

这是示例 spreadsheet

所需的结果在 Y 列中(公式向下拖动)。数组公式结果在Z列,只输出范围扩大部分的合计值。

=ArrayFormula(IF(ISBLANK($B:$B),IFERROR(1/0),YEAR(B2:B) & "-" & 
SUMPRODUCT(--(YEAR($B:B2)=YEAR(B2:B))) & "-" & MONTH(B2:B) & 
JOIN("",ArrayFormula(left(split(N2," "),1))) & IFS(COUNTIF(N2:N,"M*"),SUMPRODUCT(--(LEFT($N:N,1)="M"),--(YEAR($B:$B)=YEAR(B2:B)),--(MONTH($B:$B)=MONTH(B2:B))),
COUNTIF(N2:N,"F*"),SUMPRODUCT(--(LEFT($N:N,1)="F"),--(YEAR($B:$B)=YEAR(B2:B)),--(MONTH($B:$B)=MONTH(B2:B))),
COUNTIF(N2:N,"P*"),SUMPRODUCT(--(LEFT($N:N,1)="P"),--(YEAR($B:$B)=YEAR(B2:B)),--(MONTH($B:$B)=MONTH(B2:B))),
COUNTIF(N2:N,"I*"),SUMPRODUCT(--(LEFT($N:N,1)="I"),--(YEAR($B:$B)=YEAR(B2:B)),--(MONTH($B:$B)=MONTH(B2:B))),
COUNTIF(N2:N,"E*"),SUMPRODUCT(--(LEFT($N:N,1)="E"),--(YEAR($B:$B)=YEAR(B2:B)),--(MONTH($B:$B)=MONTH(B2:B))))))

您的跟踪号码看起来很复杂,并且不清楚在其中编码每年和每月的序号和总数有什么特别的好处。一个简单的整数序列可能会更容易。

要回答您的问题,试试这个:

=arrayformula( 
  if( not(isnumber(B2:B)), iferror(1/0), 
  year(B2:B) 
  & "-" & 
  countifs( 
    row(B2:B), "<=" & row(B2:B), 
    year(B2:B), year(B2:B) 
  ) 
  & "-" & 
  month(B2:B) 
  & 
  regexreplace( 
    regexreplace(N2:N, "(?i)\b([a-z])[a-z]+", ""), 
    "(?i)\s+|[^a-z].*", "" 
  ) 
  & 
  countifs( 
    row(B2:B), "<=" & row(B2:B), 
    year(B2:B), year(B2:B), 
    month(B2:B), month(B2:B), 
    regexextract(N2:N, "(?i)^[a-z]+"), 
    regexextract(N2:N, "(?i)^[a-z]+") 
  ) 
) )

此数组公式的结果与您在示例电子表格中显示的预期结果相匹配。

注意:您请求的跟踪编号格式包含一个字段,其中包含特定月份与事件类型匹配的案例总数。这意味着特定月份中特定事件类型的每个 跟踪编号将更改每个 时间在该月添加该类型的另一个事件。换句话说,您的跟踪号码不是“静态的”或“永久的”。

如前所述,我建议使用另一种运单号格式,例如简单的整数序列。要使跟踪编号永久不变,无论以后是否编辑事件,您都需要一个触发脚本,例如 insertUniqueId_ 脚本。

如果您在执行脚本时需要帮助,请 post 一个新问题。