Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3252|回复: 7

求改代码

[复制链接]
发表于 2020-6-23 07:16 | 显示全部楼层 |阅读模式
1学分
本帖最后由 sanfuhai 于 2020-6-23 19:49 编辑

判断包含字符,将包含多个字符的变色改成将包含的第1个字符变色。详情请看附件: 求改代码.rar (14.15 KB, 下载次数: 5)
发表于 2020-6-23 07:16 | 显示全部楼层
本帖最后由 金樽空对月 于 2020-6-23 18:10 编辑
  1. Sub ifind()
  2. Dim x%, y%, m%
  3. For m = 2 To Range("c20000").End(3).Row
  4.   For x = 3 To 5
  5.     For y = 10 To 15
  6.       If Cells(m, x) = Cells(m, y) And Cells(m, x) <> "" Then
  7.          Cells(m, y).Interior.ColorIndex = 3
  8.          GoTo 100
  9.       End If
  10.     Next
  11.   Next
  12. 100:
  13. Next
  14. End Sub
复制代码


jdfw.gif

求改代码.zip

14.86 KB, 下载次数: 3

评分

参与人数 1学分 +3 收起 理由
sanfuhai + 3 学习

查看全部评分

回复

使用道具 举报

发表于 2020-6-23 09:36 | 显示全部楼层
QQ截图20200623093334.jpg

Sub test()
    Dim A, i, j, k, n, x, y
    With Range("a1:o" & Range("o65536").End(xlUp).Row)
        .Interior.ColorIndex = xlNone
        A = .Value
    End With
    n = UBound(A, 2)

    For i = 2 To UBound(A)
        x = False: y = True
        For j = 5 To 3 Step -1

            If A(i, j) <> "" Then
                For k = 10 To n
                    If A(i, j) = A(i, k) Then x = True: Exit For
                Next
                y = y And x
            End If

        Next
        If y And k < n + 1 Then Cells(i, k).Interior.ColorIndex = 3
    Next
End Sub





是这样吗?截个图,方便看

回复

使用道具 举报

 楼主| 发表于 2020-6-23 16:34 | 显示全部楼层
本帖最后由 sanfuhai 于 2020-6-23 16:40 编辑
爱疯 发表于 2020-6-23 09:36
Sub test()
    Dim A, i, j, k, n, x, y
    With Range("a1:o" & Range("o65536").End(xlUp).Row)
...

是这样的,但是在运行时,第7行和第8行,有两个包含的数字没有改变颜色,大神能帮忙再改改吗
回复

使用道具 举报

 楼主| 发表于 2020-6-23 19:54 | 显示全部楼层

大神帮忙解答为啥一个并列判断就可以定位到包含的第一个数改变颜色。“if then”那两句

回复

使用道具 举报

发表于 2020-6-23 20:34 | 显示全部楼层
Sub test()
    Dim A, i, j, k, n, m
    With Range("a1:o" & Range("o65536").End(xlUp).Row)
        .Interior.ColorIndex = xlNone
        A = .Value
    End With
    n = UBound(A, 2)

    For i = 2 To UBound(A)
        m = 0

        '如果找到,就更新m
        For j = 5 To 3 Step -1
            If A(i, j) <> "" Then
                For k = 10 To n
                    If A(i, j) = A(i, k) Then m = k: Exit For
                Next
            End If
        Next

        If m > 0 And m < n + 1 Then Cells(i, m).Interior.ColorIndex = 3
    Next
End Sub

评分

参与人数 1学分 +3 收起 理由
sanfuhai + 3 学习

查看全部评分

回复

使用道具 举报

发表于 2020-6-23 20:39 | 显示全部楼层
本帖最后由 金樽空对月 于 2020-6-23 20:40 编辑
sanfuhai 发表于 2020-6-23 19:54
大神帮忙解答为啥一个并列判断就可以定位到包含的第一个数改变颜色。“if then”那两句

这不单纯是这两个条件的原因,if then只是判断条件,就是判断左边三个数字里面只要第一个数字和右边的数字相等就填充为红色,后面加了一个不等于零的条件,只是为了排除空单元格,因为空单元格会被默认为0值而影响结果;
更重要的是颜色填充之后的goto 100这句,它是跳转到某一段代码的意思,因为你只是填充第一个符合条件的单元格,
因此只要有一个符合条件的,那么后面的就可以不用再循环判断了,所以就可以直接跳到下一行数据的判断过程了。
不知道这样说你能不能看懂。


回复

使用道具 举报

 楼主| 发表于 2020-6-23 21:22 | 显示全部楼层
金樽空对月 发表于 2020-6-23 20:39
这不单纯是这两个条件的原因,if then只是判断条件,就是判断左边三个数字里面只要第一个数字和右边的数 ...

谢谢谢谢,明白了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 20:53 , Processed in 1.220593 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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