【问题标题】:Excel VBA Generating report based on groupingExcel VBA 基于分组生成报表
【发布时间】:2013-06-15 19:15:54
【问题描述】:

我有一个我创建的 Excel VBA。它根据输入文件生成输出。

在该文件中,有一个包含用户名的字段,这些用户名在整个列中重复。

我需要做的是,将用户名分配给单独的单元格以唯一不重复,然后计算重复的。

【问题讨论】:

  • 您能否详细解释一下您的输入文件是怎样的,以及您想要的输出到底是怎样的?在输入文件中,您在换行符中有用户名?那些用户名是重复的?是在同一行吗?逗号分隔吗?并且您希望在 excel 中为每个单元格(在单列中)设置一个用户名,但不重复它们?
  • 每个都在一个单元格中。但在同一行

标签: excel vba


【解决方案1】:

假设我的 excel 工作表设置如下:

  1. A 列中的用户名列表
  2. 在 B 列中,我想要所有唯一的用户名
  3. 在 C 列中,我想计算每个名称的数量

        Username     Unique     Count
    1   John         John       1
    2   Susan        Susan      2
    3   Chris        Chris      3
    4   Susan
    5   Chris
    6   Chris
    

我可以在 VBA 中通过将用户名放入字典中来做到这一点,其中Key 是用户名,Value 是重复次数。然后,我只需遍历字典即可获得所需的输出。

这段代码对我有用:

Sub UserNameCount()
    Dim usernames As Range, name As Range, rw As Long

    Set dict = CreateObject("Scripting.Dictionary")
    Set usernames = Range("A2:A" & Range("A1").End(xlDown).Row)
    rw = 2

    For Each user In usernames
        If Not dict.Exists(user.Value) Then
            dict.Add user.Value, 1
        Else
            dict.Item(user.Value) = dict.Item(user.Value) + 1
        End If
    Next user

    For Each v In dict.Keys
        Range("B" & rw) = v
        Range("C" & rw) = dict.Item(v)
        rw = rw + 1
    Next

    Set dict = Nothing
End Sub

注意:您可能需要执行“工具”>“参考”>“Microsoft 脚本运行时”才能使字典正常工作

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多