|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 大雨治水 于 2017-12-13 19:51 编辑
前些天关注了一下由简称查找全称、用于了对比字符串的相似度(或叫雷同度),并需要对不同的部分进行标注,如下图,
需要对比A列与B列的不同的字符,并标注成红色:
我找了许多代码,没有得到好的方案,研究了几天,做用了论坛的一个自定义函数,自己再加上几句代码,基本解决了这个问题:
代码不是很完善,只是达到的基本效果,大家有兴趣的可以完善一下,并分享之,谢谢!
代码如下:
- Sub 标注不同字符()
- Dim myrow%, i%, j%, n%, m%, s%
- Dim str$, s1$, s2$, s3$
- Dim strA$, strB$
- On Error Resume Next
- Call 恢复颜色
- ''将区域设置为文本格式
- Columns("A:B").NumberFormatLocal = "@"
- myrow = Range("A65536").End(xlUp).Row
- For i = 2 To myrow
- ''先修改全部字符串的颜色
- Cells(i, 1).Font.Color = vbRed
- Cells(i, 2).Font.Color = vbRed
- strA = Cells(i, 1).Value
- strB = Cells(i, 2).Value
- ''提取最大相同字符串
- s1 = xt(strA, strB)
- abc:
- m = Len(s1)
- n = InStr(1, Cells(i, 1).Value, s1)
- ''.Characters(Start:=1, Length:=1).Font....
- Cells(i, 1).Characters(n, m).Font.ColorIndex = vbBlack '改成黑色
- n = InStr(1, Cells(i, 2).Value, s1)
- Cells(i, 2).Characters(n, m).Font.ColorIndex = vbBlack '改成黑色
- ''去除相同内容后,再提取相同内容
- strA = Replace(strA, s1, "")
- strB = Replace(strB, s1, "")
- If StrReverse(strA) <> strB Then
- If Len(strA) >= 2 And Len(strB) >= 2 Then
- ''提取最大相同字符串
- s1 = xt(strA, strB)
- If s1 <> "" Then
- GoTo abc
- End If
- End If
- End If
- m = 0
- n = 0
- Next i
- End Sub
复制代码
下面这段求最大相同字符串的自定义函数是论坛找到的:
- Function xt(rng1, rng2)
- ''最大相同部分
- Dim n%, j%, i%
- zf = LCase(rng1)
- zf2 = LCase(rng2)
- p = ""
- n = Len(zf)
- For i = n To 1 Step -1
- For j = 1 To n - i + 1
- z = Mid(zf, j, i)
- If InStr(zf2, z) Then
- p = z
- GoTo 100
- End If
- Next
- Next
- 100:
- xt = p
- End Function
复制代码
这个代码是调试用的,用于恢复字体颜色为黑色,可有可无:
- Sub 恢复颜色()
- Cells.Font.ColorIndex = 0
- End Sub
复制代码
附件下载:
找出两个单元格中不同的字符并用颜色标示出来--谢顺胜.zip
(13.65 KB, 下载次数: 343)
补充内容 (2018-8-21 15:56):
修改了一下,把最新的代码上传一下:
附件见14楼! |
评分
-
4
查看全部评分
-
|