![6b4433763ab613aa91fc5f857e477647.png](https://i-blog.csdnimg.cn/blog_migrate/ff91037ad8bda0873940516ea6bb1919.jpeg)
大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第73讲内容:利用字典,统计出给定字符串中每个字符出现的次数.
在VBA的利用中,字典可以利用在方方面面,今日我们来讲一个利用字典统计给定字符中字符数的方案,有点类似于WORD文档中,统计字数的程序。
实例,在下面的E1单元格中有一个字符串,要统计一下每个字符出现的次数,我们看看利用字典来如何做到。
![31e95a8cc5b2d2b6e5c0d9b00b056f92.png](https://i-blog.csdnimg.cn/blog_migrate/d90f4850bb5df5cd0e8e51d62c283e8b.png)
思路,我们要分别截取字符串的每个字符,放到字典中,在放的同时统计出现的次数。仍是利用字典的排重功能和统计功能,下面看我给出的代码。
Sub mynzsz_73() '第73讲 利用字典,统计出给定字符串中每个字符出现的次数
Sheets("73").Select
'字符串取自第五个单元格的数据
mystr = Cells(1, 5)
'创建字典
Set mydic = CreateObject("scripting.dictionary")
'将字符串数据装入字典,并计数
For i = 1 To Len(mystr)
temp = Mid(mystr, i, 1)
If Not mydic.exists(temp) Then
mydic.Add temp, 1
Else
mydic(temp) = mydic(temp) + 1
End If
Next
'清空指定区域
[a:b].ClearContents
'回填数据
[a1:b1] = Array("字符", "出现次数")
[a2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)
[b2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.items)
Set mydic = Nothing
End Sub
代码截图:
![bb1c2204692961feb719818498ff4de9.png](https://i-blog.csdnimg.cn/blog_migrate/a1146de3f6ee2e1e328efbafbeda2e8b.jpeg)
代码讲解:
1 上述代码实现了从一个字符串中统计字符数的功能,首先将字符串放到mystr 中,利用Mid(mystr, i, 1) 函数来分别提取每个字符,放到字典中,用键值统计出现的次数.
2 temp = Mid(mystr, i, 1) 从mystr的字符串中第的位置提取一个字符,也就是说将字符串的每个字符都要提取出来。
3 If Not mydic.exists(temp) Then
mydic.Add temp, 1
Else
mydic(temp) = mydic(temp) + 1
End If
将每个字符放到字典的键中,键值计数,每次出现重复值加1.
4 '清空指定区域
[a:b].ClearContents
'回填数据
[a1:b1] = Array("字符", "出现次数")
[a2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)
[b2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.items)
上述预计清空指定区域,回填数据,这里利用了分别填键和键值的方法。当然,还可以有其他的方法。
5 Set mydic = Nothing
上述代码清空内存.
下面看代码的运行:
![21808b081e2682cf2d176878955eb4aa.png](https://i-blog.csdnimg.cn/blog_migrate/5510e05eb5705a7a62df0cdf213e0b0d.jpeg)
今日内容回向:
1 如何从字符串中统计每个字符出现的次数?
2 在数据回填时有哪些方法可以利用?