VBA实例:字符串的查找与标记

文摘   2024-11-14 22:34   四川  

大家好,这是Excel小火箭的第50次分享,若有不妥之处,欢迎批评指正。

若文章对您有所启发,欢迎「点赞」「在看」「转发」。这对我很重要,能给我更多的动力,以持续分享优质内容。

最近有小伙伴提到想要对比两个版本的字符串,并在字符串中标记出不同的新增或删减,先来看看效果。以上期的菜单为例:

编程思路:①识别字符串在新版中是否存在;②标记新/旧版中不存在的字符。


01
字符串的查找


对于字符串的查找,我们通常使用inStr函数,返回Variant (Long),指定一字符串在另一字符串中最先出现的位置。


语法:InStr([start, ]string1, string2[, compare]),即(从哪里开始找,在哪里找,要找的字符,可选参数)


例如,instr(1,"Rocket","k"),返回4,看起来是不是很好用的样子,没关系,稍后我们看实例再来理解。

02
字符串的标记

从某一长串字符串中标记指定字符串,我们通常使用Range.Characters 属性使用 Characters 对象可为文本字符串内的字符设置格式。

语法:表达式.Characters(Start, Length),表示从第几个字符开始,标记的长度。


按照惯例,附上源码:

Sub rocket_CreatMenu()'// VBA字符串的识别与标记'// 2024-11-14 By Sdx孙大侠//公众号: Excel小火箭        Dim menuA As Range, menuB As Range        Range("c2:c3").ClearContents    Range("b2:b3").Font.Color = 0        Set menuA = Range("B2")    Set menuB = Range("B3")            Range("C2").Value = getRocketMenu(menuA, menuB) '//识别    Range("C3").Value = getRocketMenu(menuB, menuA)        Call getMarkMenu(menuA, Range("c2"))    '//标记    Call getMarkMenu(menuB, Range("c3"))        Set menuA = Nothing    Set menuB = Nothing    End Sub
Private Function getRocketMenu(menuA As Range, menuB As Range) As String'// VBA字符串的识别'// 2024-11-14 By Sdx孙大侠//公众号: Excel小火箭 Dim arr Dim str As String Dim i As Integer, j As Integer arr = Split(menuB, Space(1)) For i = LBound(arr) To UBound(arr) j = InStr(1, menuA, arr(i), vbTextCompare) '//判断字符是否存在 If j = 0 Then str = str & arr(i) & Space(1) Next getRocketMenu = str End Function
Private Function getMarkMenu(menuA As Range, menuB As Range)'// VBA字符串的标记'// 2024-11-14 By Sdx孙大侠//公众号: Excel小火箭 Dim arr Dim i As Integer, j As Integer arr = Split(Trim(menuB), Space(1)) For i = LBound(arr) To UBound(arr) j = InStr(1, menuB, arr(i), vbTextCompare) '//判断字符是否存在 If j > 0 Then menuB.Characters(j, Len(arr(i))).Font.ColorIndex = 3 Next End Function

希望本期文章对你有所启发,源码已同步上传,回复关键字"VBA"获取下载地址。

推荐阅读

分享几个VBA编程好习惯

VBA实例:字典的详解与应用


-END-

客官都看到这儿了
记得点赞加关注哦
下次更新时间,周日21:35

Excel小火箭
一个专注于Excel技巧分享的公众号