首页 > 解决方案 > 在“SUMIF”中沿总和范围广播的标准范围

问题描述

SUMIF如果两个参数使用不同的范围维度,Google 电子表格能否在其函数中广播行或列,特别是在 中?

例如,我希望SUMIF(B1:F1, "Offices", B2:F4)返回56+23+23,因为1x5范围B1:F1将在行维度中重复以匹配3x5范围B2:F4。PS:这种重复称为次元广播。不幸的是,这不起作用,SUMIF只是忽略它没有条件的 2 行并返回56

     A       B            D        D     E          F
1    Month   Maintenance  Offices  Cars  Employees  Cars 
2    Jan     23           56       43    23         56
3    Feb     12           23       67    43         21
4    March   44           23       45    56         45

问题:我可以在 SUMIF 中指定一个标准,其中列或行保持固定,就像条件格式一样?换句话说,如何在 SUMIF 中指定一个标准,以便广播标准范围?

为什么 DSUM 不起作用:请注意,这SUMIF(B1:F4,"Offices",B1:F4)可以解决问题,只是它会在这里失败,因为B1:F4它不是一个正确的数据库,因为有两个名为"Car". 此外,DSUM要求列标题与其数据相邻,而我想我想将总和放在标题和数据之间。话虽如此,我也想学习一个强大的概念,而不是DSUM功能。

条件格式Google 电子表格确实提供格式广播,例如,如果我A1:F4在条件 上格式化范围=A$1="Cars",那么两个“汽车”列将被格式化,即使它们是列DF.

与做广播的 numpy 相比, numpy在 Python 编程时可以用作电子表格库,做一些称为(维度)广播的事情。考虑一个 1 行 3 列的数组(读取电子表格)a和另一个b3 行 3 列的数组。然后我们可以要求numpy将两个元素(读取单元格)相乘,它将重复单行a三次以匹配 的维度b

import numpy

a = numpy.array([
    [0, 1, 2]
])

b = numpy.array([
    [0, 1, 2],
    [3, 4, 5],
    [7, 8, 9],
])

a * b

结果,请注意整个第一列乘以 0,整个第二列乘以 1,整个第三列乘以 2:

numpy.array([
    [0, 1, 4],
    [0, 4, 10],
    [0, 8, 18],
])

标签: google-sheets

解决方案


=SUMPRODUCT(QUERY(TRANSPOSE(A1:F10), "where Col1 = 'Offices'"))

2


推荐阅读