答案1
IT
从问题和评论来看,您似乎想要获得第 7 行右侧所有列中出现的次数总数。Allocated
例如,您的数据以两列为一组。一个条目是Allocated
和Region
,下一个是Interim
和Region
,等等。如果这是正确的,那么类似这样的方法可以解决任何大小的区域的问题:
=LET(allData,C8:T9,prevHeader,OFFSET(allData,-1,-1,1),targetData,FILTER(allData,prevHeader="Allocated"),SUM(IF(targetData="IT",1,0)))
这依赖于LET()
和FILTER()
函数,因此,如果您的 Excel 版本没有这些函数,则此方法将不起作用。不过,此答案底部有一个公式的替代版本,应该可以使用。该LET()
函数允许您将复杂的公式重命名为单个变量,以便以后更轻松地引用。我们可以将上面的大公式分解为这些更容易理解的部分:
allData,C8:T9
将您的所有数据(不包括标题)保存为变量allData
。prevHeader,OFFSET(allData,-1,-1,1)
通过向上移动一行、向左移动一列来偏移数据,并且只有一行高。targetData,FILTER(allData,prevHeader="Allocated")
allData
返回左侧列标题为“已分配”的所有单元格。这将是“已分配”列之后的“区域”列的所有数据。SUM(IF(targetData="IT",1,0))
将所有“IT”值变为 1,其他所有值变为 0,然后将它们相加。COUNTIF()
由于我们的使用方式,该方法不起作用溢出函数。这是最后一个参数,因此它不会与变量名匹配,而只是作为结果返回。
这一切的好处在于,可以很容易地构建一个小表,引用该小表的行和列标题,然后创建一个填充所有数据的公式:
中的公式W8
为:
=LET(allData,$C$8:$T$9,prevHeader,OFFSET(allData,-1,-1,1),targetData,FILTER(allData,prevHeader=W$7),SUM(IF(targetData=$V8,1,0)))
请注意,我们必须将其中一些范围引用设置为绝对 ( $
) 而不是相对,但不是全部。这样我们就可以将该公式复制/粘贴到我们漂亮的小表格上,所有内容都会根据需要进行更新。
如果你没有 LET() 和 FILTER()
你可以放弃所有花哨的部分并写得更短,但在我看来,更难遵循公式:
=SUM(IF(IF(OFFSET(C8:T9,-1,-1,1)="Allocated",C8:T9,0)="IT",1,0))
该公式是通过采用此答案顶部的原始公式并将重命名的部分一点一点地替换回公式中而创建的。我们还必须将 替换FILTER()
为IF(~,1,0)
。您也可以像上面一样将其制作成漂亮的表格。公式将改为:
=SUM(IF(IF(OFFSET($C$8:$T$9,-1,-1,1)=W$7,$C$8:$T$9,0)=$V8,1,0))