前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA实用小程序65: 实现多重替换

VBA实用小程序65: 实现多重替换

作者头像
fanjy
发布2020-11-24 10:53:44
5880
发布2020-11-24 10:53:44
举报
文章被收录于专栏:完美Excel

学习Excel技术,关注微信公众号:

excelperfect

这是在dailydoseofexcel.com中学到的技术,使用一个自定义函数来实现冗长的多重替换。

例如,想要将单元格A2中的字符串:

qaINCf/a,AND'&uv-LLCg.h/DBAuiLTD

中的“AND”、“INC”、“LLC”、“LTD”、“DBA”、空格、句点、逗号、连接符、斜杠、单引号替换掉。

一般会想到使用SUBSTITUTE函数,很自然的编写公式为:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(UPPER(A2),"AND",""),"INC",""),"LLC",""),"LTD",""),"DBA",""),"",""),".",""),",",""),"&",""),"-",""),"/",""),"'","")

得到结果:

QAFAUVGHUI

虽然获得了结果,但公式非常冗长,如果要替换的字符越多,则嵌套越多。此时,可以使用VBA编写一个自定义函数来解决。

代码如下:

代码语言:javascript
复制
Public Function Subst( _
  text As String, _
  NewText As String, _
  ParamArray OldText() As Variant) _
  As String
    Dim vItem As Variant
    Dim sReturn As String
    Dim vArray As Variant
   
    sReturn = text
   
    vArray = OldText
    BubbleSortLen vArray
   
    For Each vItem In vArray
        sReturn = Replace(sReturn, vItem,NewText, , , vbTextCompare)
    Next vItem
   
    Subst = sReturn
   
End Function
 
Public Sub BubbleSortLen(ByRef vArray As Variant)
    Dim i As Long
    Dim j As Long
    Dim sTemp As String
   
    For i = LBound(vArray) To UBound(vArray) -1
        For j = i To UBound(vArray)
            If Len(vArray(j)) >Len(vArray(i)) Then
                sTemp = vArray(i)
                vArray(i) = vArray(j)
                vArray(j) = sTemp
            End If
        Next j
    Next i
End Sub

此时,在单元格中输入公式:

=Subst(UPPER(A2),"","AND","INC","LLC","LTD","DBA","CO","",".",",","&","-","/","'")

将得到相同的结果。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档