ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何把单元格中以","分隔的重复内容重点标示?

如何把单元格中以","分隔的重复内容重点标示?

作者:绿色风 分类: 时间:2022-08-17 浏览:125
楼主
liuguansky
Q:如何把单元格中以","分隔的内容的以相同的字体颜色和加粗进行标示.不同的重复值以不同的颜色标示.
A:用如下代码可以实现:


  1. Sub justtest()
  2.     Dim arr, i&, d, ar, j%, k&, s% '定义变量
  3.     Set d = CreateObject("scripting.dictionary") '创建字典项目,用于存放颜色值
  4.     Application.ScreenUpdating = False '关闭屏幕刷新
  5.     With Range([l6], [l6].End(4)) '获取目标区域
  6.         .Font.Color = xlblack '初始字体颜色
  7.         .Font.Bold = False '初始粗体
  8.         arr = .Value '赋值数组
  9.     End With '结束获取对象
  10.     For i = 1 To UBound(arr, 1) '循环数组
  11.        ar = Split(arr(i, 1), ",") '分隔出各子项,赋值予数组
  12.        For j = 0 To UBound(ar) '循环子项数组
  13.             If d.Exists(ar(j)) Then '判断是否重复,如果重复生成相同的随机颜色值
  14.                 If d(ar(j)) = 0 Then
  15.                     s = Int(j * 15 + Rnd() * 14) Mod 56 + 1
  16.                     If s = 2 Or s = 20 Or s = 34 Then s = s + 1
  17.                     d(ar(j)) = s
  18.                 End If
  19.                 Else: d.Add ar(j), 0
  20.             End If
  21.         Next j
  22.     Next i
  23.     For i = 1 To UBound(arr, 1) '第二值循环
  24.         ar = Split(arr(i, 1), ",")
  25.         s = 0 '初始化字符长度标识符
  26.         For j = 0 To UBound(ar)
  27.             If d(ar(j)) > 0 Then '如果重复
  28.                 k = k + 1
  29.                 With Range("l" & i + 5).Characters(s + 1, Len(ar(j))).Font '进行相应子项颜色标记
  30.                     .Bold = True
  31.                     .ColorIndex = d(ar(j))
  32.                 End With
  33.             End If
  34.             s = s + Len(ar(j)) + 1 '字符长度累加
  35.         Next j
  36.     Next i
  37.     If k = 0 Then
  38.         MsgBox ("如果出现此提示框,说明:" & Chr(10) & "没有发现重复项")
  39.         Else
  40.         MsgBox ("如果出现此提示框,说明:" & Chr(10) & "发现 " & k & " 处重复项,请 进 一步确认BOM")
  41.     End If
  42.     Application.ScreenUpdating = True
  43.     Set d = Nothing
  44. End Sub


2楼
nzkboy
呵呵,前段时间才经常登陆此网站,没想到发了5个贴后就被收录了2贴,不容易呀
3楼
nzkboy
根据老师的方案,我在下面增加了几行代码,提示重复的内容多少的,这样让操作者更容易判断,否则个别标识成黄色或是内容多的可能不容易被区别出来,所以增加一个判断的步骤。

    If k = 0 Then
    MsgBox ("如果出现此提示框,说明:" & Chr(10) & "没有发现重复项")
    Else
    MsgBox ("如果出现此提示框,说明:" & Chr(10) & "发现 " & k & " 处重复项,请 进 一步确认BOM")
    End If

另外说一步,老师的第38步应该是

    Application.ScreenUpdating = True '开启屏幕刷新

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap