ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4986|回复: 11

[求助] 比较两个单元格中的字符串,相同的字符用红色标出,求大神VBA 指点

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-12 19:13 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大神求助,
想要比较两个单元格中的字符串,相同的字符用红色标出,希望大小写不会影响整个功能。
请看如下情况,希望能够实现这样的功能,能够highlight标出同样的字符,因为本人是VBA 小白,求大神指教,万分感谢!!!

image.png

TA的精华主题

TA的得分主题

发表于 2019-11-12 20:43 | 显示全部楼层
  1. Option Compare Text
  2. Sub 按钮1_Click()
  3.     Application.ScreenUpdating = False
  4.     arr = [a1].CurrentRegion
  5.     For j = 6 To UBound(arr)
  6.         For i = Len(arr(j, 2)) To 2 Step -1
  7.             str1 = Left(arr(j, 2), i)
  8.             x = InStr(arr(j, 1), str1)
  9.             If x > 0 Then
  10.                 Cells(j, 2).Characters(1, Len(str1)).Font.ColorIndex = 3
  11.                 Cells(j, 1).Characters(x, Len(str1)).Font.ColorIndex = 3
  12.                 For k = i + 1 To 2 Step -1
  13.                     str1 = Right(arr(j, 2), k)
  14.                     y = InStr(arr(j, 1), str1)
  15.                     If y > x Then
  16.                         Cells(j, 2).Characters(Len(arr(j, 2)) - Len(str1) + 1, Len(str1)).Font.ColorIndex = 3
  17.                         Cells(j, 1).Characters(y, Len(str1)).Font.ColorIndex = 3
  18.                         Exit For
  19.                     End If
  20.                 Next
  21.                 Exit For
  22.             End If
  23.         Next i
  24.     Next j
  25.     Application.ScreenUpdating = True
  26. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-11-12 20:46 | 显示全部楼层
欢迎新朋友,建议以后发帖上传附件
根据楼主目前的模拟数据,按照第二列左侧数据有匹配采取匹配右侧数据来处理的,供参考

工作簿1.zip

15 KB, 下载次数: 117

TA的精华主题

TA的得分主题

发表于 2019-11-12 23:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Goodeve705 于 2019-11-13 00:18 编辑

image.png
  1. Sub compare()
  2.     Dim arr, brr

  3.     For i1 = 2 To Cells(10000, 1).End(xlUp).Row
  4.         str1 = Cells(i1, 1)
  5.         str2 = Cells(i1, 2)
  6.         n = Len(str1)
  7.         
  8.         ReDim arr(1 To n)
  9.         ReDim brr(1 To n)
  10.         
  11.         For ii1 = 1 To n
  12.             arr(ii1) = Left(str1, ii1)
  13.             brr(ii1) = Right(arr(ii1), 1)
  14.             
  15.             nn1 = InStr(str2, brr(ii1))
  16.             nn2 = InStr(str2, Chr(Asc(brr(ii1)) + 32))
  17.             nn3 = InStr(str2, Chr(Asc(brr(ii1)) - 32))
  18.             If nn1 Or nn2 Or nn3 Then
  19.                 Cells(i1, 1).Characters(ii1, 1).Font.ColorIndex = 3
  20.             End If
  21.         Next
  22.         
  23.     Next

  24. End Sub
复制代码

拆分第一列字符串,instr与第二列比较,存在则变色
拆分第二列字符串,instr与第二列比较,存在则变色(我没写)原理同上

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-13 09:56 | 显示全部楼层
liulang0808 发表于 2019-11-12 20:46
欢迎新朋友,建议以后发帖上传附件
根据楼主目前的模拟数据,按照第二列左侧数据有匹配采取匹配右侧数据来 ...

大神,这个情况还有一种就是中间有空格的或者顺序颠倒的也希望能够匹配的上,类似这种,可以么,非常感谢 image.png
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-13 10:04 | 显示全部楼层
Goodeve705 发表于 2019-11-12 23:51
拆分第一列字符串,instr与第二列比较,存在则变色
拆分第二列字符串,instr与第二列比较,存在则变色( ...

感谢回复,这个我试了一下是重复匹配的对吗,就是只要有相同字符就会标红。我表述的还是不够清楚,我希望能够得到的情况是两个相邻顺序一样的,这样的才考虑标红,还有就是说不会被空格影响,要是能同时加粗就更好了。感谢感谢!

TA的精华主题

TA的得分主题

发表于 2019-11-13 11:14 来自手机 | 显示全部楼层
首先处理字符串,(去掉空格,变小写)
然后拆分字符串(每两字符)
最后instr判断,存在则变红变粗(暂时没有代码嘻嘻)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-13 12:10 | 显示全部楼层
Goodeve705 发表于 2019-11-13 11:14
首先处理字符串,(去掉空格,变小写)
然后拆分字符串(每两字符)
最后instr判断,存在则变红变粗(暂 ...

感谢回复,但是我自己写确实还是有点难,希望大神有空的时候能够再给一下代码,感谢!!!

TA的精华主题

TA的得分主题

发表于 2019-11-13 12:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
734yu 发表于 2019-11-13 09:56
大神,这个情况还有一种就是中间有空格的或者顺序颠倒的也希望能够匹配的上,类似这种,可以么,非常感谢 ...

楼主这种比较存在其他可能,多少个字符组合算是有效的
abcdxyzbcdef    abcdef
这样的怎么办?算是怎么匹配的?

还会有其他组合,最后的结果,可以理解为缩小到取每个字符去匹配了。比如4楼代码

之前的代码是按照取左侧字符串,匹配之后,才匹配右侧剩余字符串,不是取其中一段匹配。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-13 13:06 | 显示全部楼层
本帖最后由 734yu 于 2019-11-13 13:12 编辑
liulang0808 发表于 2019-11-13 12:18
楼主这种比较存在其他可能,多少个字符组合算是有效的
abcdxyzbcdef    abcdef
这样的怎么办?算是怎么 ...

感谢回复,我也是觉得按照左侧字符串匹配之后才匹配剩余的比较好,但是我试了这串代码发现有一部分不显示匹配,请您看一下为什么前几行不显示呢,再次感谢大神指教! image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 21:29 , Processed in 0.051143 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表