编程思路:①识别字符串在新版中是否存在;②标记新/旧版中不存在的字符。
对于字符串的查找,我们通常使用inStr函数,返回Variant (Long),指定一字符串在另一字符串中最先出现的位置。
语法:InStr([start, ]string1, string2[, compare]),即(从哪里开始找,在哪里找,要找的字符,可选参数)
按照惯例,附上源码:
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
推荐阅读