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 一个新问题。
我想在 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 一个新问题。