在我们小区,每年9月份小区会以自愿的方式举办一次聚餐,以达到交流促进邻里关系的目的
在微信接龙的方式下会收到如下的数据:
参加人员接龙
我试过EXCEL的自动填充
image.png
不是很理想,里面会有一些错误,而且对文字的数不能做统计。 有没有比较理想的方式可以较快速地得到我要的结果呢?
这个时候,我想起了正则表达式,从《自学是门手艺》里面有讲到正则表达式,现 在学VBA又看到了正则表达式,正好遇到这次聚餐接龙,要对人员进行统计,就边学边开始用了。
坚持一惯的做法,遇到问题,先将问题拆解,拆解成一个个可以解决的小问题,小问题解决了,大问题也会得到解决。
先有一个大概的图如下:
问题拆解
整个解题过程的步骤图如下:
image.png
每一步可以细分为更小的步骤:
这里以提取大人数为例:
提取大人数.gif
将各个步骤完成之后,我们利用编好的程进行操作,如图:
操作过程.gif
从一段接龙数据,到整理过后的数据
image.png
最后贴上两段代码:
提取大人数的代码如下:
Sub 提取大人数()
Dim regx As Object, mat, n%, k, rng, rngs
Set rngs = Sheet4.Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)
Set regx = CreateObject("vbscript.regexp")
Range("B2:e" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
With regx
.Global = True
.Pattern = "\D(个|個)?大人"
For Each rng In rngs
Set mat = .Execute(rng)
For Each k In mat
n = n + 1
Cells(rng.Row, n + 1) = Left(k, 1)
Next
n = 0
Next
End With
End Sub
由文字变数字的代码:
Sub 更改数字()
Dim rng, rngs As Range
Dim i%
Dim dic As New Dictionary
Dim arr
arr = Sheet4.Range("K2:L" & Cells(Rows.Count, 11).End(xlUp).Row)
Set rngs = Sheet4.Range("B2:C" & Cells(Rows.Count,
2).End(xlUp).Row)
'定义字典
For i = 0 To UBound(arr, 1) - 1
If Not dic.Exists(arr(i + 1, 1)) Then
dic.Add arr(i + 1, 1), arr(i + 1, 2)
End If
Next
For Each rng In rngs
For i = 0 To dic.Count - 1
rng.Replace what:=dic.Keys(i), replacement:=dic.Items(i)
Next
Next
End Sub
总结:
现在社会产生的数据越来越多,对于同我们生活相关的信息,怎样与数据相处,从而帮助我们做决策越来越重要,学会编程不一定是去当程序员,而是手上多一个工具解决问题。
学知识的过程,只有将知识用起来,才会让自己越学越有劲,在实践中对知识的消化会更好。
网友评论