ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教,这2个关于数据对比的需求,代码怎么写?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-9-22 14:06 | 显示全部楼层 |阅读模式
请教,这2个关于数据对比的需求,代码怎么写?
请指点,谢谢!




F列数据行数变化不定。

需求1:
当 F 列单元格包含星号“*”,对比“*”左右的数值,
(请注意,只须对比“*”左右的数值,忽略非数字的字符,如:字母,φ,= 等等,也忽略加号及其后的数值。)
如果“*”左边的数值 > “*”右边的数值,则将该单元格颜色改为红色,
例 F13 单元格,20>13,因此要改单元格为红色。

需求2:
当 F 列单元格包含SQ和星号“*”时,对比“*”左右的数值是否相等,如不相等,则将该单元格颜色改为红色.
(请注意,只须对比“*”左右的数值,忽略非数字的字符,如:字母,φ,= 等等,也忽略加号及其后的数值。)



Snip_14-02-08.jpg

工作簿1.zip (8.31 KB, 下载次数: 8)

TA的精华主题

TA的得分主题

发表于 2022-9-22 14:40 | 显示全部楼层
Sub lll()

    Dim rex As Object
    Dim i As Integer
    Dim rng As Range
   
    Set rex = CreateObject("vbscript.regexp")
    i = Cells(Rows.Count, 6).End(xlUp).Row
   
    For Each rng In Range("f2:f" & i)
        If InStr(1, rng, "*") <> 0 Then
            With rex
                .Global = True
                .IgnoreCase = True
                .Pattern = "[0-9.]+"
                If .Execute(rng)(0) > .Execute(rng)(1) Then
                    rng.Interior.ColorIndex = 3
                End If
        End With
        End If
        
        If InStr(1, rng, "*") <> 0 And InStr(1, rng, "SQ") <> 0 Then
            With rex
                .Global = True
                .IgnoreCase = True
                .Pattern = "[0-9.]+"
                If .Execute(rng)(0) = .Execute(rng)(1) Then
                    rng.Interior.ColorIndex = 6
                End If
        End With
        End If
    Next
   
   


End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-9-22 15:42 | 显示全部楼层
2222.jpg


工作簿1.zip (20.11 KB, 下载次数: 4)
试试

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-22 21:22 | 显示全部楼层
tiger1976 发表于 2022-9-22 14:40
Sub lll()

    Dim rex As Object

有一事不明白,再请教一下:
我增加了一些数据测试,效果良好,但是对于以下数据无效,以下数据,16>5,应该标记为红色,但运行代码后没变化:
OBφ16*5
把5换成>=10的数值,测试结果则正常。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-22 21:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

效果很赞!感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-24 20:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tiger1976 发表于 2022-9-22 14:40
Sub lll()

    Dim rex As Object

估计这个正则表达式有点问题:当数值为2位数时,被用于对比的只有十位数,个位数被忽略了,例如:29*5,代码不标记为红色,它只对比 2<5,认为不用标记为红色。
但正则我实在不懂,不知道应该如何改。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-8 12:00 | 显示全部楼层

能否再请教一事?


我一楼的数据考虑不周,有种情况没列举,导致您这代码会误报 (不是代码原因,是因为我一楼的数据样品没提供齐全):
遇到数据末尾为 *R... 时,忽略 *R...,例如下图中的 F9, F10 单元格的数据,只处理*R前的数据,不要处理*R及后面的数据。
代码须如何更新?谢谢!

Snip_11-55-58.jpg

工作簿1.zip (7.86 KB, 下载次数: 0)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 12:21 , Processed in 0.039405 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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