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