如何在Excel中解析和统计不同的列表?

如何在Excel中解析和统计不同的列表?,excel,list,vba,Excel,List,Vba,我有一个excel列,如下所示: 第1人,第2人 第三人 第四个人 第五个人 第一人 第1人,第4人 因此,在每个单元格中,要么有一个人,要么有一张名单。我想把这些加起来,以便能够从上面的结构中生成这样的每个人的计数 人1:3 人2:1 人3:1 人4:2 人5:1 在VBA中有什么好的方法可以做到这一点吗?如果所有单元格中只包含一个人,则可以通过转到“数据”>“文本到列”,选择“分隔符”并选中逗号来实现。如果人们不是用逗号分隔的,那么您需要一种方法来分隔他们 使用二维数组,存储每个元素的第一维

我有一个excel列,如下所示:

第1人,第2人 第三人 第四个人 第五个人 第一人 第1人,第4人

因此,在每个单元格中,要么有一个人,要么有一张名单。我想把这些加起来,以便能够从上面的结构中生成这样的每个人的计数

人1:3 人2:1 人3:1 人4:2 人5:1


在VBA中有什么好的方法可以做到这一点吗?

如果所有单元格中只包含一个人,则可以通过转到“数据”>“文本到列”,选择“分隔符”并选中逗号来实现。如果人们不是用逗号分隔的,那么您需要一种方法来分隔他们


使用二维数组,存储每个元素的第一维中的person和第二维中的count。循环遍历包含列表的单元格,并使用Mid检查该单元格的子字符串是否等于数组第一维度中的任何字符串。如果是,则将该元素的计数增加1。

在VBA中查看split函数

在你的行中循环,然后做

数组=拆分单元格字符串

split返回一个字符串数组,然后可以循环并计数


希望这能帮助您走上正确的道路。

要使用它,您需要为Dictionary对象添加对Microsoft脚本运行时的引用

Sub countU()

Dim c As Range
Dim s As String, v As Variant, i As Integer
Dim arr() As String
Dim dic As Dictionary
Set dic = New Dictionary

'call your actual range here 
For Each c In ActiveSheet.Range("A1:A5")
    s = c.Value
    s = Replace(s, "Person", "")
    s = Replace(s, " ", "")
    arr = Split(s, ",")

    For Each v In arr
        If dic.Exists(v) Then
            dic.Item(v) = dic.Item(v) + 1
        Else
            dic.Add v, 1
        End If

    Next v
Next c

For Each strKey In dic.Keys()
    'output to your desired location here
    Debug.Print "Person " & strKey & ": " & dic.Item(strKey)

Next strKey


End Sub

对这一点可能有改进的是,使其成为一个函数,它接受一个范围—您的范围—在我的示例中迭代我所调用的A1:A5,然后将函数的输出设置为一个填充了您发现的值的范围。

请添加到您的帖子:1。你在尝试什么,以及2。任何你得到的错误。谢谢。在示例的最后一行,第一个人和下一个人之间应该有逗号吗?