excel - COUNTIF、VLOOKUP 和映射引用

标签 excel excel-formula pivot-table vlookup countif

我需要使用公式而不是 VBA 来完成这些操作。

我有一个表格,其中包含有关某些位置的数据:

表 1

<表类=“s-表”> <标题> 记录号 地点 状态 <正文> 1 位置 1 新 2 位置 1 旧 3 位置 2 新 4 位置 4 旧 5 位置 1 新 6 位置 6 旧 7 位置 1 新 8 位置 2 新 9 位置 3 新

如果我想计算每个位置的"new"记录数量,我知道我可以这样做:

表 1a

<表类=“s-表”> <标题> 地点 COUNT <正文> 位置 1 =COUNTIF([位置],"位置 1",[状态],"新") 位置 2 =COUNTIF([位置],"位置 2",[状态],"新") 位置 3 =COUNTIF([位置],"位置 3",[状态],"新") 位置 4 =COUNTIF([位置],"位置 4",[状态],"新") 地点5 =COUNTIF([位置],"位置 5",[状态],"新") 位置 6 =COUNTIF([位置],"位置 6",[状态],"新")

但是,我有这张表将位置收集到组中:

表 2

<表类=“s-表”> <标题> 地点 组 <正文> 位置 1 A组 位置 2 A组 位置 3 A组 位置 4 B组 地点5 B组 位置 6 C组

我的目标是计算每组中"new"记录的数量:

表 3

<表类=“s-表”> <标题> A组 B组 C组 <正文> 计数 计数 计数

我不知道下一步该做什么。当我尝试使用 COUNTIF() 来计算某些内容时,我的头开始旋转, VLOOKUP() ,或者可能是数据透视表。我想知道是否 SUMPRODUCT()MMULT()会有帮助,但我不太理解它们。

最佳答案

尝试使用以下公式:

enter image description here


• 单元格 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,则可以使用一个动态数组公式来溢出。

enter image description here


• 单元格 H2 中使用的公式

=BYCOL(H1:J1,LAMBDA(x,
 SUM(N(FILTER(C2:C10,ISNUMBER(
 XMATCH(B2:B10,FILTER(E2:E7,F2:F7=x))))="New"))))

您可以尝试的另一种方法:

enter image description here


• 单元格 H2 中使用的公式

=SUM((XLOOKUP($B$2:$B$10,$E$2:$E$7,$F$2:$F$7)=H$1)*($C$2:$C$10="New"))

或者,一次性全部溢出:

enter image description here


• 在单元格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( ):

enter image description here


• 在单元格H2

=BYCOL((XLOOKUP(B2:B10,E2:E7,F2:F7)=H$1:J$1)*(C2:C10="New"),LAMBDA(x,SUM(x)))

您也可以使用MMULT( ):

enter image description here


• 单元格 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来实现所需的输出。

enter image description here


要使用 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"

enter image description here


  • 最后,将其导入回Excel --> 点击关闭并加载关闭并加载到 --> 第一个单击的一个将创建一个包含所需输出的新工作表,而后者将提示一个窗口,询问您将结果放在哪里。

Excel文件可以从here下载


关于excel - COUNTIF、VLOOKUP 和映射引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77251591/

相关文章:

python - 'str' 对象没有属性 'mime' 错误?

python - 使用 Pandas 在python中循环遍历多个excel文件

excel - 如何使用公式 excel 2007 获取工作表名称

链接到其他工作簿的 Excel 公式不会自动更新(无需打开源)

excel - 添加行时 MS Excel 自动填充不正确的公式

excel - 如何使用 VS 2008 VB 将一个单元格或一系列单元格从一个 Excel 电子表格复制到另一个 Excel 电子表格

c++ - 在 C++ 或 C# 中打开受密码保护的 Excel 文件提示输入密码,即使我已经传递了密码参数

java - Apache POI : Excel Pivot Table - Row Label

excel - Python win32com PivotCache.CreatePivotChart() 错误 : 'Exception occurred'

r - 在 R 中,自定义由 dcast.data.table 创建的列的名称