美文网首页VBA学习之路
小试牛刀,正则表达式的应用

小试牛刀,正则表达式的应用

作者: 周建雄key | 来源:发表于2019-08-28 13:30 被阅读0次

    在我们小区,每年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
    

    总结:
    现在社会产生的数据越来越多,对于同我们生活相关的信息,怎样与数据相处,从而帮助我们做决策越来越重要,学会编程不一定是去当程序员,而是手上多一个工具解决问题。
    学知识的过程,只有将知识用起来,才会让自己越学越有劲,在实践中对知识的消化会更好。

    相关文章

      网友评论

        本文标题:小试牛刀,正则表达式的应用

        本文链接:https://www.haomeiwen.com/subject/lgmpectx.html