Excel精英培训网

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

[VBA] 用VBA实现垂直一相连和斜对角线 优化再优化

[复制链接]
发表于 2016-10-4 21:43 | 显示全部楼层 |阅读模式
用VBA实现垂直一相连和斜对角线  优化再优化

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2016-10-7 22:45 | 显示全部楼层
本帖最后由 laoau138 于 2016-10-7 22:46 编辑

还有什么好方法,请发贴,高手

Sub 按钮1_Click()
    With [a3:t12]
        .ClearFormats
        For i = 1 To .Columns.Count
            For j = 1 To .Rows.Count
                If .Cells(j, i) <> "" Then .Cells(j, i).Interior.Color = vbGreen
            Next
        Next
        For i = 1 To .Columns.Count
            For j = 1 To .Rows.Count
                If .Cells(j, i) <> "" Then
                    If .Cells(j - 1, i) = "" Then
                        x = 1
                        While .Cells(j, i).Offset(x, 0) <> ""
                            x = x + 1
                        Wend
                        If x >= 5 Then
                            .Cells(j, i).Resize(x).Interior.Color = vbRed
                        ElseIf x = 4 Then
                            .Cells(j, i).Resize(x).Interior.Color = vbYellow
                        End If
                    End If
                    If i = 1 Then
                        GoTo xxx
                    ElseIf .Cells(j + 1, i - 1) = "" Then
xxx:
                        x = 1
                        While .Cells(j, i).Offset(-x, x) <> ""
                            x = x + 1
                        Wend
                        c = IIf(x >= 5, vbRed, vbYellow)
                        If x >= 4 Then
                            For k = 0 To x - 1
                                .Cells(j, i).Offset(-k, k).Interior.Color = c
                            Next
                        End If
                    End If
                End If
            Next
        Next
    End With
End Sub


评分

参与人数 1 +6 收起 理由
today0427 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2016-10-7 23:19 | 显示全部楼层
laoau138 发表于 2016-10-7 22:45
还有什么好方法,请发贴,高手

Sub 按钮1_Click()

学习了!你都是哪儿找来的这些题目啊,居然还自带答案!真是很好的学习资料!
回复

使用道具 举报

 楼主| 发表于 2016-10-7 23:23 | 显示全部楼层
today0427 发表于 2016-10-7 23:19
学习了!你都是哪儿找来的这些题目啊,居然还自带答案!真是很好的学习资料!

一楼题目来自EH

两个答案找人写
回复

使用道具 举报

发表于 2016-10-8 11:24 | 显示全部楼层
  1. Sub grf()
  2.     Dim Rng As Range
  3.     Range("a3:t12").Interior.ColorIndex = 0
  4.     For Each Rng In Range("a3:t12")
  5.         If Len(Rng) > 0 Then Rng.Interior.ColorIndex = 4
  6.     Next
  7.     For xs = 4 To 5   '步长选4及5就行,超过部分会由下一个Rng补上
  8.         For Each Rng In Range("a3:t12")
  9.             If Len(Rng) > 0 Then Call 相等或连续(Rng, xs)
  10.         Next
  11.     Next
  12. End Sub

  13. Sub 相等或连续(Rng As Range, xs)     '判断以Rng为当前位置,八个方向xs个单位内是否相等或连续
  14.     Dim IsEq As Boolean
  15.     On Error Resume Next     '容错,当方向出界
  16.     If xs = 0 Then Exit Sub
  17.     cl = IIf(xs = 4, 6, 3) '颜色(连续4格满足,填黄色,否则填红色)
  18.     For rr = -1 To 1     '八个方向
  19.         For cc = -1 To 1
  20.             If rr = 0 And cc = 0 Then GoTo 100
  21.             
  22.             IsEq = True    '相同情况
  23.             For j = 1 To xs - 1
  24.                 If Rng.Offset(rr * j, cc * j) <> Rng Or Rng.Offset(rr * j, cc * j) = "" Then IsEq = False: Exit For
  25.             Next
  26.             If IsEq = True Then     '满足条件,填色
  27.                 For j = 0 To xs - 1
  28.                     Rng.Offset(rr * j, cc * j).Interior.ColorIndex = cl
  29.                 Next
  30.                 GoTo 100
  31.             End If
  32.             
  33.             IsEq = True     '连续情况
  34.             For j = 1 To xs - 1
  35.                 If Rng.Offset(rr * j, cc * j) <> Rng.Offset(rr * (j - 1), cc * (j - 1)) + 1 Or Rng.Offset(rr * j, cc * j) = "" Then IsEq = False: Exit For
  36.             Next
  37.             If IsEq = True Then
  38.                 For j = 0 To xs - 1
  39.                     Rng.Offset(rr * j, cc * j).Interior.ColorIndex = cl
  40.                 Next
  41.             End If
  42.             
  43. 100:    Next
  44.     Next
  45. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
laoau138 + 3 来学习

查看全部评分

回复

使用道具 举报

发表于 2016-10-8 11:31 | 显示全部楼层
请看附件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +3 收起 理由
laoau138 + 3 来学习

查看全部评分

回复

使用道具 举报

发表于 2016-10-8 11:32 | 显示全部楼层
2楼代码只考虑了纵向,把横向的漏掉了。
原附件自带的代码只考虑了左到右,上到下,逆向的漏掉了。
5楼的考虑了八个方向。

评分

参与人数 1 +3 收起 理由
laoau138 + 3 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-10-8 12:06 | 显示全部楼层
grf1973 发表于 2016-10-8 11:32
2楼代码只考虑了纵向,把横向的漏掉了。
原附件自带的代码只考虑了左到右,上到下,逆向的漏掉了。
5楼的 ...

这个不知道,题目是其他 人
回复

使用道具 举报

 楼主| 发表于 2016-10-8 12:08 | 显示全部楼层

大侠这个如何做

VBA计算一行同时出现2个数的遗漏

http://www.excelpx.com/thread-424909-1-1.html


回复

使用道具 举报

 楼主| 发表于 2016-10-8 16:22 | 显示全部楼层
today0427 发表于 2016-10-7 23:19
学习了!你都是哪儿找来的这些题目啊,居然还自带答案!真是很好的学习资料!

today  可以去可以了

VBA计算一行同时出现2个数的遗漏

http://www.excelpx.com/thread-424909-1-1.html


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 09:51 , Processed in 0.452669 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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