我需要使用公式而不是 VBA 来完成这些操作。
我有一个表格,其中包含有关某些位置的数据:
表 1
如果我想计算每个位置的"new"记录数量,我知道我可以这样做:
表 1a
但是,我有这张表将位置收集到组中:
表 2
我的目标是计算每组中"new"记录的数量:
表 3
我不知道下一步该做什么。当我尝试使用 COUNTIF()
来计算某些内容时,我的头开始旋转, VLOOKUP()
,或者可能是数据透视表。我想知道是否 SUMPRODUCT()
或MMULT()
会有帮助,但我不太理解它们。
最佳答案
尝试使用以下公式:
• 单元格 H2 中使用的公式
=SUM(N(FILTER($C$2:$C$10,ISNUMBER(XMATCH($B$2:$B$10,
FILTER($E$2:$E$7,H$1=$F$2:$F$7))))="New"))
注意:公式需要填写正确,并确保根据您的套装更改范围和引用。
如果您使用的是MS365
,则可以使用一个动态数组公式来溢出。
• 单元格 H2 中使用的公式
=BYCOL(H1:J1,LAMBDA(x,
SUM(N(FILTER(C2:C10,ISNUMBER(
XMATCH(B2:B10,FILTER(E2:E7,F2:F7=x))))="New"))))
您可以尝试的另一种方法:
• 单元格 H2 中使用的公式
=SUM((XLOOKUP($B$2:$B$10,$E$2:$E$7,$F$2:$F$7)=H$1)*($C$2:$C$10="New"))
或者,一次性全部溢出:
• 在单元格H2
=BYCOL(H1:J1,LAMBDA(x,
SUM((XLOOKUP($B$2:$B$10,$E$2:$E$7,$F$2:$F$7)=x)*($C$2:$C$10="New"))))
或者,以这种方式使用BYCOL( ):
• 在单元格H2
=BYCOL((XLOOKUP(B2:B10,E2:E7,F2:F7)=H$1:J$1)*(C2:C10="New"),LAMBDA(x,SUM(x)))
您也可以使用MMULT( ):
• 单元格 H2 中使用的公式
=MMULT(TOROW(A2:A10)^0,(XLOOKUP(B2:B10,E2:E7,F2:F7)=H$1:J$1)*(C2:C10="New"))
或者,
=MMULT(TRANSPOSE(A2:A10)^0,(XLOOKUP(B2:B10,E2:E7,F2:F7)=H$1:J$1)*(C2:C10="New"))
或者,
=MMULT(TRANSPOSE(A2:A10^0),(INDEX(F2:F7,MATCH(B2:B10,E2:E7,0))=H1:J1)*(C2:C10="New"))
您还可以使用POWER QUERY来实现所需的输出。
要使用 POWER QUERY 执行任务,请按照以下步骤操作:
- 首先将两个源范围转换为表格并相应命名,在本示例中,我将其命名为
Locationtbl
&Grouptbl
- 接下来,从数据选项卡打开一个空白查询 --> 获取并转换数据 --> 获取数据 --> 来自其他来源 --> 空白查询
- 上面的内容让 Power Query 窗口打开,现在从 Home 选项卡 --> 高级编辑器 --> 并粘贴以下内容 < kbd>M-Code,删除您看到的任何内容,然后按完成
let
//Source Tables --> Locationtbl & Grouptbl
LocationSource = Excel.CurrentWorkbook(){[Name="Locationtbl"]}[Content],
GroupSource = Excel.CurrentWorkbook(){[Name="Grouptbl"]}[Content],
//Merging both the tables using Left Join
Merge = Table.NestedJoin(LocationSource, {"LOCATION"}, GroupSource, {"LOCATION"}, "GroupSource", JoinKind.LeftOuter),
//Expanding the records
#"Expanded Grouptbl" = Table.ExpandTableColumn(Merge, "GroupSource", {"GROUP"}, {"GROUP"}),
//Grouping by Group Column
#"Grouped Rows" = Table.Group(#"Expanded Grouptbl", {"GROUP"}, {{"All", each _, type table [STATUS=text, GROUP=text]}}),
//Added Custom Index Column
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([All],"Index",1,1)),
//Removed unwanted columns
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Custom"}),
//Expanding Columns
#"Expanded Custom" = Table.ExpandTableColumn(#"Removed Other Columns", "Custom", {"STATUS", "GROUP", "Index"}, {"STATUS", "GROUP", "Index"}),
//Removing the Status which are old
#"Filtered Rows" = Table.SelectRows(#"Expanded Custom", each ([STATUS] = "New")),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"STATUS"}),
//Pivoting the column to get the counts.
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[GROUP]), "GROUP", "Index", List.Count)
in
#"Pivoted Column"
- 最后,将其导入回Excel --> 点击关闭并加载或关闭并加载到 --> 第一个单击的一个将创建一个包含所需输出的新工作表,而后者将提示一个窗口,询问您将结果放在哪里。
Excel文件可以从here下载
关于excel - COUNTIF、VLOOKUP 和映射引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77251591/