如何统计筛选状态下列中以DOT或PRO开头的唯一名称数量
实现方案
以下所有方案均自动适配任意列的筛选条件,调整公式内的范围参数即可匹配你的实际表格结构。假设你要统计的目标列范围为A2:A100,可按需替换为实际数据范围。
Excel 公式方案
Excel 365 / 2021 及以上版本
统计以PRO开头的唯一可见值总数:
=SUM(--(LEN(UNIQUE(FILTER(A2:A100, (LEFT(A2:A100,3)="PRO")*(SUBTOTAL(103,OFFSET(A2:A100,ROW(A2:A100)-MIN(ROW(A2:A100)),0,1))>0))))>0)
统计以DOT开头的唯一可见值总数,只需把公式内的"PRO"替换为"DOT"即可。
公式原理:先用
SUBTOTAL判断行是否可见,再通过FILTER筛选符合前缀要求的可见内容,UNIQUE去重后统计有效结果数量。如果不需要忽略手动隐藏的行,把SUBTOTAL的第一个参数103改为3即可。
旧版 Excel(无FILTER/UNIQUE函数)
使用数组公式,输入完成后需要按Ctrl+Shift+Enter确认生效:
统计以PRO开头的唯一可见值总数:
=SUM(IF(FREQUENCY(IF(SUBTOTAL(103,OFFSET(A2:A100,ROW(A2:A100)-ROW(A2),0,1)),IF(LEFT(A2:A100,3)="PRO",MATCH(A2:A100,A2:A100,0))),ROW(A2:A100)-ROW(A2)+1),1))
统计以DOT开头的唯一可见值总数,同样替换公式内的"PRO"为"DOT"即可。
VBA 自定义函数方案
适合频繁使用该统计需求的场景,不受Excel版本限制,调用更简单:
- 按
Alt+F11打开VBA编辑器,插入模块,粘贴以下代码:
Function CountUniqueVisiblePrefix(rng As Range, prefix As String) As Long Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") Dim cell As Range For Each cell In rng ' 跳过隐藏行和空单元格 If Not cell.EntireRow.Hidden And cell.Value <> "" Then ' 不区分大小写匹配前缀 If Left(UCase(cell.Value), Len(prefix)) = UCase(prefix) Then If Not dict.exists(cell.Value) Then dict.Add cell.Value, 1 End If End If End If Next cell CountUniqueVisiblePrefix = dict.Count End Function
- 回到表格直接调用函数即可:
- 统计PRO前缀:
=CountUniqueVisiblePrefix(A2:A100, "PRO") - 统计DOT前缀:
=CountUniqueVisiblePrefix(A2:A100, "DOT")
- 统计PRO前缀:
内容的提问来源于stack exchange,提问作者sootz
相关产品推荐
相关产品推荐

