首页 > 解决方案 > 根据列名求和?

问题描述

我有一个 Google 表格,其中的数字是手动输入的,以便记录各种站点的活动。该工作表包含一个日期列,每个日期作为一个行值。然后它有三列(总测试、总阳性、总空隙),每个站点都重复这些列。有 10 个站点(将会增长),因此总共有 10 个测试、10 个总阳性、10 个总无效列。

我想做的是根据列名求和,以便每天自动添加所有站点的总测试、总阳性和总无效。

我尝试在数据透视表上使用 SUM 计算字段,但是当我这样做时,使用“Total tests”,它只选择了具有该名称的第一列,并没有对具有该名称的所有列求和。

有没有办法使用数据透视表(或替代方法)来汇总具有相同名称的那些列的每日总数?

标签: google-sheetsgoogle-sheets-formula

解决方案


您的工作表具有预测布局(例如,每个站点始终有 3 列),因此您可以起诉MOD3 以始终获取每 3 列并将它们相加:

AH3:

=INDEX(MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF), 3)=0), SEQUENCE(COLUMNS(
               FILTER(C3:AF, MOD(COLUMN(C:AF), 3)=0)), 1, 1, 0)))

人工智能3:

=INDEX(MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF)-1, 3)=0), SEQUENCE(COLUMNS(
               FILTER(C3:AF, MOD(COLUMN(C:AF)-1, 3)=0)), 1, 1, 0)))

AJ3:

=INDEX(MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF)-2, 3)=0), SEQUENCE(COLUMNS(
               FILTER(C3:AF, MOD(COLUMN(C:AF)-2, 3)=0)), 1, 1, 0)))

在此处输入图像描述

要删除零,您可以在 AH3 中执行此操作:

=INDEX(IFERROR(1/(1/MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF), 3)=0), SEQUENCE(COLUMNS(
                            FILTER(C3:AF, MOD(COLUMN(C:AF), 3)=0)), 1, 1, 0)))))

更新:

=ARRAYFORMULA(QUERY(QUERY({IF(A3:A<>"",ISOWEEKNUM(A3:A),),
 MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF),   3)=0), SEQUENCE(COLUMNS(
         FILTER(C3:AF, MOD(COLUMN(C:AF),   3)=0)), 1, 1, 0)), 
 MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF)-1, 3)=0), SEQUENCE(COLUMNS(
         FILTER(C3:AF, MOD(COLUMN(C:AF)-1, 3)=0)), 1, 1, 0)),
 MMULT(1*FILTER(C3:AF, MOD(COLUMN(C:AF)-2, 3)=0), SEQUENCE(COLUMNS(
         FILTER(C3:AF, MOD(COLUMN(C:AF)-2, 3)=0)), 1, 1, 0))}, 
 "select Col1,sum(Col2),sum(Col3),sum(Col4) where Col2 > 0 group by Col1"), 
 "offset 1", 0))

在此处输入图像描述


推荐阅读