ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助如何优化窗口输入区域选择自定义字数以上相同文字标红

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-15 19:46 | 显示全部楼层 |阅读模式

求助如何优化窗口输入区域选择自定义字数以上相同文字标红,现处理A2:A150(150条)处理需要时间3个钟
窗口输入区域选择自定义字数以上相同文字标红.zip (19.31 KB, 下载次数: 2)

2024-12-15_194404.jpg
  1. Sub 窗口输入区域选择自定义字数以上相同文字标红()
  2.     Dim ws As Worksheet
  3.     Dim cell As Range
  4.     Dim cellText As String
  5.     Dim i As Long, j As Long, k As Long
  6.     Dim minSubstringLength As Long
  7.     Dim foundMatch As Boolean
  8.     Dim startMatch As Long
  9.     Dim currentSubstring As String
  10.     Dim inputValue As String
  11.     Dim userRange As Range
  12.    
  13.     ' 设置最小子字符串长度的默认值或让用户输入
  14.     inputValue = InputBox("请输入要查找的重复子字符串的最小长度(例如:5):", "输入最小长度")
  15.     If inputValue = vbNullString Then Exit Sub ' 用户点击了取消
  16.     If Not IsNumeric(inputValue) Or CLng(inputValue) <= 0 Then
  17.         MsgBox "请输入一个大于0的有效数字。", vbExclamation
  18.         Exit Sub
  19.     End If
  20.     minSubstringLength = CLng(inputValue)
  21.    
  22.     ' 让用户选择范围
  23.     On Error Resume Next
  24.     Set userRange = Application.InputBox("请选择要处理的单元格范围:", "选择范围", Type:=8)
  25.     On Error GoTo 0
  26.     If userRange Is Nothing Then Exit Sub ' 用户没有选择范围
  27.    
  28.     ' 关闭屏幕更新以提高性能
  29.     Application.ScreenUpdating = False
  30.    
  31.     ' 遍历用户选择的范围内的每个单元格
  32.     For Each cell In userRange
  33.         cellText = cell.Value
  34.         ' 遍历文本的所有可能子字符串
  35.         For i = minSubstringLength To Len(cellText)
  36.             ' 遍历文本,从第一个字符开始
  37.             For j = 1 To Len(cellText) - i + 1
  38.                 currentSubstring = Mid(cellText, j, i)
  39.                 ' 检查后续文本中是否有匹配的子字符串
  40.                 foundMatch = False
  41.                 For k = j + 1 To Len(cellText) - i + 1
  42.                     If Mid(cellText, k, i) = currentSubstring Then
  43.                         ' 找到匹配项,标红匹配文本
  44.                         cell.Characters(j, i).Font.Color = RGB(255, 0, 0)
  45.                         foundMatch = True
  46.                         Exit For
  47.                     End If
  48.                 Next k
  49.                 ' 如果找到匹配,可以跳出内层循环避免重复标红
  50.                 If foundMatch Then Exit For
  51.             Next j
  52.         Next i
  53.     Next cell
  54.    
  55.     ' 重新开启屏幕更新
  56.     Application.ScreenUpdating = True
  57.    
  58.     MsgBox "标红完成!", vbInformation
  59. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 16:10 , Processed in 0.031358 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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