Excel 2013中基于另一列统计指定列唯一值的宏实现问题
适用于Excel 2013的VBA实现方案
因为Excel 2013不支持UNIQUE和FILTER函数,我们可以用VBA自带的Scripting.Dictionary对象来实现需求——基于指定列的参数值,统计另一列的唯一值数量。
实现代码
Sub Main() Dim Param As String Param = "a" ' 可替换为需要查询的参数,比如"b" MsgBox UniqueValues(Param) End Sub Function UniqueValues(Param As String) As Integer Dim dict As Object Dim lastRow As Long Dim i As Long Dim col1Value As String, col2Value As String ' 创建字典对象 Set dict = CreateObject("Scripting.Dictionary") ' 获取数据最后一行(假设数据从第2行开始,第1行是表头) lastRow = ThisWorkbook.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row ' 遍历数据行 For i = 2 To lastRow col1Value = ThisWorkbook.ActiveSheet.Cells(i, "A").Value col2Value = ThisWorkbook.ActiveSheet.Cells(i, "B").Value ' 当col_1的值匹配参数时,将col_2的值加入字典(自动去重) If col1Value = Param Then If Not dict.Exists(col2Value) Then dict.Add col2Value, col2Value End If End If Next i ' 返回字典中唯一值的数量 UniqueValues = dict.Count ' 释放对象 Set dict = Nothing End Function
代码说明
- Scripting.Dictionary:VBA中专门用于存储键值对的对象,键具有唯一性,刚好满足统计唯一值的需求。
- 遍历数据:从第2行(表头行之后)到数据最后一行,逐个检查col_1的值是否匹配参数。
- 去重逻辑:只有当col_2的值不在字典中时,才将其添加进去,确保每个值只存储一次。
- 返回结果:字典的
Count属性就是符合条件的唯一值数量,直接返回即可。
测试验证
用你提供的示例数据:
| col_1 | col_2 |
|---|---|
| a | x |
| a | y |
| b | z |
| b | z |
- 当
Param = "a"时,函数返回2; - 当
Param = "b"时,函数返回1,完全符合预期。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

