大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第73讲内容:利用字典,统计出给定字符串中每个字符出现的次数.
在VBA的利用中,字典可以利用在方方面面,今日我们来讲一个利用字典统计给定字符中字符数的方案,有点类似于WORD文档中,统计字数的程序。
实例,在下面的E1单元格中有一个字符串,要统计一下每个字符出现的次数,我们看看利用字典来如何做到。
思路,我们要分别截取字符串的每个字符,放到字典中,在放的同时统计出现的次数。仍是利用字典的排重功能和统计功能,下面看我给出的代码。
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
代码截图:
代码讲解:
1上述代码实现了从一个字符串中统计字符数的功能,首先将字符串放到mystr中,利用Mid(mystr,i, 1)函数来分别提取每个字符,放到字典中,用键值统计出现的次数.
2 temp= Mid(mystr, i, 1)从mystr的字符串中第的位置提取一个字符,也就是说将字符串的每个字符都要提取出来。
3 IfNot 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
上述代码清空内存.
下面看代码的运行:
今日内容回向:
1如何从字符串中统计每个字符出现的次数?
2在数据回填时有哪些方法可以利用?
领取专属 10元无门槛券
私享最新 技术干货