You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_1col_2
ax
ay
bz
bz
  • 当Param = "a"时,函数返回2;
  • 当Param = "b"时,函数返回1,完全符合预期。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:25:44