如何让Excel根据两列数据生成「X个水果在BoxX」格式的统计结果?
可行解决方案
方法一:函数组合实现动态自动更新(Excel 365/2021及以上)
适合支持动态数组函数的版本,数据变更时自动同步统计结果:
- 假设「Boxes」列在B列,「Fruits」列在C列(数据从第2行开始)
- 提取唯一箱果组合:在D2单元格输入公式
=UNIQUE(B2:C),会自动生成两列唯一的箱子与水果配对 - 生成指定格式文本:在F2单元格输入公式
=COUNTIFS(B:B,D2,C:C,E2)&" "&E2&" in "&D2,公式会随UNIQUE的动态数组自动溢出,无需手动下拉
方法二:旧版Excel兼容方案
若你的Excel版本不支持动态数组,可按以下步骤操作:
- 选中B、C列数据区域,点击「数据」选项卡→「高级」筛选,勾选「将筛选结果复制到其他位置」,设置复制起始单元格(如D2),勾选「选择不重复的记录」,确定后得到唯一箱果组合
- 在F2单元格输入公式
=COUNTIFS(B:B,D2,C:C,E2)&" "&E2&" in "&D2,下拉填充至所有唯一组合行 - 快速刷新可添加宏按钮:
- 按
Alt+F11打开VBA编辑器,插入新模块,粘贴代码:Sub RefreshUniqueList() Range("D2:E1000").ClearContents ' 可根据实际数据范围调整清空区域 Range("B2:C" & Cells(Rows.Count, "B").End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("D2"), Unique:=True Range("F2:F" & Cells(Rows.Count, "D").End(xlUp).Row).FormulaR1C1 = "=COUNTIFS(C[-4],RC[-2],C[-3],RC[-1])&"" ""&RC[-1]&"" in ""&RC[-2]" End Sub - 返回工作表,插入形状(如矩形),右键指定宏为
RefreshUniqueList,点击即可一键刷新
- 按
方法三:VBA自动触发更新
若希望数据变更时自动刷新统计列表,可使用工作表事件:
- 按
Alt+F11打开VBA编辑器,双击目标工作表(如Sheet1),粘贴以下代码:
修改B/C列数据时,统计列表会自动更新Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当B/C列数据变更时触发 If Not Intersect(Target, Range("B:C")) Is Nothing Then Application.EnableEvents = False ' 避免循环触发 Range("D2:F1000").ClearContents Range("B2:C" & Cells(Rows.Count, "B").End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("D2"), Unique:=True If Cells(Rows.Count, "D").End(xlUp).Row >= 2 Then Range("F2:F" & Cells(Rows.Count, "D").End(xlUp).Row).FormulaR1C1 = "=COUNTIFS(C[-4],RC[-2],C[-3],RC[-1])&"" ""&RC[-1]&"" in ""&RC[-2]" End If Application.EnableEvents = True End If End Sub
内容的提问来源于stack exchange,提问作者Akkkkinnn
相关产品推荐
相关产品推荐

