ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 修改需求:快速统计和标注单元格2种颜色red 或者Black(忽略标点符号和数字)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-26 17:33 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub JudgeColor()
    Dim rng As Range, i As Long, j As Long, k As Byte, str As String, strColor
    Dim blnWzRed As Boolean, blnWzBlack As Boolean, blnBdRed As Boolean
    Dim blnBdBlack As Boolean, blnNoRed As Boolean, blnNoBlack As Boolean
    Dim rg As Range, Bd As String
    '自定义需要过滤的标点符号,Chr(34)表示英文状态下的双引号
    Bd = ",。?;:“’”‘!!'?,.、" & Chr(34)
    Set rng = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
    Set rng = Intersect(ActiveSheet.UsedRange, rng)
    For i = 2 To rng.Rows.Count
        blnWzRed = False
        blnWzBlack = False
        blnBdRed = False
        blnBdBlack = False
        blnNoRed = False
        blnNoBlack = False
        Set rg = rng.Cells(i, 1)
        For j = 1 To Len(rg.Value)
            With rg.Characters(Start:=j, Length:=1)
                str = .Text
                strColor = .Font.ColorIndex
            End With
            If InStr(1, Bd, str) > 0 Then
                If strColor = 3 Then blnBdRed = True Else blnBdBlack = True
            ElseIf IsNumeric(str) Then
                If strColor = 3 Then blnNoRed = True Else blnNoBlack = True
            Else
                If strColor = 3 Then blnWzRed = True Else blnWzBlack = True
            End If
            If blnWzRed And blnWzBlack Then Exit For
        Next j
        If blnWzRed And blnWzBlack Then
            rng.Cells(i, 2).Value = "mixed"
        ElseIf blnWzRed Then
            If Not blnBdBlack And Not blnNoBlack Then
                rng.Cells(i, 2).Value = "red"
            ElseIf blnBdBlack And blnNoBlack Then
                rng.Cells(i, 2).Value = "red (忽略标点符号和数字颜色)"
            ElseIf blnBdBlack Then
                rng.Cells(i, 2).Value = "red (忽略标点符号颜色)"
            Else
                rng.Cells(i, 2).Value = "red (忽略数字颜色)"
            End If
        ElseIf blnWzBlack Then
            If Not blnBdRed And Not blnNoRed Then
                rng.Cells(i, 2).Value = "black"
            ElseIf blnBdRed And blnNoRed Then
                rng.Cells(i, 2).Value = "black (忽略标点符号和数字颜色)"
            ElseIf blnBdRed Then
                rng.Cells(i, 2).Value = "black (忽略标点符号颜色)"
            Else
                rng.Cells(i, 2).Value = "black (忽略数字颜色)"
            End If
        End If
    Next i
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-26 19:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
qlmgu 发表于 2023-2-26 15:40
那也很好。可以帮我加入返回结果到具体行、忽略标点和数字的颜色吗?真太感激了。

提到具体字符,就不是单元格整体。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-26 20:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
smiletwo 发表于 2023-2-26 19:06
提到具体字符,就不是单元格整体。

感谢老师耐心地启发我这个外行。就是我的想法确实不符合实际。谢谢smiletwo老师。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-26 20:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
追风少年丶斌 发表于 2023-2-26 17:33
Sub JudgeColor()
    Dim rng As Range, i As Long, j As Long, k As Byte, str As String, strColor
   ...

回复老师:您的程序测试模拟数据,结果完全正确,完美。我现在去测试3.5K文本字数比较多的数据。如果可以顺利完成,我再向老师报告。

TA的精华主题

TA的得分主题

发表于 2023-2-26 21:17 | 显示全部楼层
追风少年丶斌 发表于 2023-2-26 17:33
Sub JudgeColor()
    Dim rng As Range, i As Long, j As Long, k As Byte, str As String, strColor
   ...

你这像是chatGPT的代码

TA的精华主题

TA的得分主题

发表于 2023-2-26 21:44 来自手机 | 显示全部楼层
zxskyqq 发表于 2023-2-26 21:17
你这像是chatGPT的代码

第一个是ChatGPT的代码,后面是我自己修改了一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-26 21:48 | 显示全部楼层
本帖最后由 qlmgu 于 2023-2-26 22:01 编辑
追风少年丶斌 发表于 2023-2-26 21:44
第一个是ChatGPT的代码,后面是我自己修改了一下

无论如何都感谢您的帮助。软件还在运行,超过1个小时了(再次报告:最后没有结果)。是我的要求不符合实际。抱歉了各位老师。

TA的精华主题

TA的得分主题

发表于 2023-2-26 22:08 来自手机 | 显示全部楼层
qlmgu 发表于 2023-2-26 21:48
无论如何都感谢您的帮助。软件还在运行,超过1个小时了(再次报告:最后没有结果)。是我的要求不符合实 ...

可以把代码里面再加一个判断,当满足某几个条件之后跳出循环可以大大加快运行的速度

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-26 23:28 | 显示全部楼层
追风少年丶斌 发表于 2023-2-26 22:08
可以把代码里面再加一个判断,当满足某几个条件之后跳出循环可以大大加快运行的速度

可以帮我写一下吗 谢谢了

TA的精华主题

TA的得分主题

发表于 2023-2-27 10:00 来自手机 | 显示全部楼层
qlmgu 发表于 2023-2-26 23:28
可以帮我写一下吗 谢谢了

If blnWzRed And blnWzBlack Then Exit For '在这一句的后面,加上以下两句
            If blnWzRed And blnBdBlack And blnNoBlack Then Exit For
            If blnWzBlack And blnBdRed And blnNoRed Then Exit For
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 22:22 , Processed in 0.044040 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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