Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 兰色幻想

VBA80集第24集答疑专贴

  [复制链接]
发表于 2012-11-26 16:35 | 显示全部楼层
panan123_0 发表于 2011-9-27 21:31
Sub 数组方法()
Dim arr, t
Dim x As Integer


一年前您就开始学习了。。太厉害了。。。我现在刚学,也发现这种方法会是漏掉一个,而后面的两种方法对此都有解决方法。。我也想了半天,准备发个贴,问下了,看到您的帖子,不用发了。解决了。。呵呵。兰版的小失误。。。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2012-11-26 16:40 | 显示全部楼层
panan123_0 发表于 2011-9-27 21:31
Sub 数组方法()
Dim arr, t
Dim x As Integer

我还想了一个方法就是把sr="后面加上sr = sr & "A" & x + 1 & ":D" & x + 1 & ","这一句。呵呵
回复

使用道具 举报

发表于 2012-12-14 00:59 | 显示全部楼层
panan123_0 发表于 2011-9-27 21:31
Sub 数组方法()
Dim arr, t
Dim x As Integer

      If Len(sr) > 255 Then
        sr = sr1
        Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
        sr = ""
      End If
改为:
      If Len(sr) > 255 Then
         Range(Left(sr1, Len(sr1) - 1)).Interior.ColorIndex = 3
        sr = "A" & x1 & ":D" & x & ","
      End If
即可!
回复

使用道具 举报

发表于 2012-12-14 01:07 | 显示全部楼层
兰老师辛苦了!程序思路非常值得借鉴,至于其中存在一些小的疏忽完全可以理解!
回复

使用道具 举报

发表于 2012-12-20 09:35 | 显示全部楼层
兰总说的sr<>"",这句话,要不要效果是一样的,还有最后一行如果是大于500的行是不会被选
回复

使用道具 举报

发表于 2013-1-18 22:54 | 显示全部楼层
我怎么不明白啊    If x = UBound(arr) Then Application.Intersect(Range("a:d"), Range(Left(sr, Len(sr) - 1))).Interior.ColorIndex = 3
   If arr(x, 1) > 500 Then
      sr1 = sr
      x1 = x + 1
      Do
        x = x + 1
      Loop Until arr(x, 1) <= 500
      
      sr = sr & x1 & ":" & x & ","
      If Len(sr) > 255 Then
        sr = sr1
        x = x1 - 1
        Application.Intersect(Range("a:d"), Range(Left(sr, Len(sr) - 1))).Interior.ColorIndex = 3
        sr = ""
      End If
      x = x - 1
   End If

怎么才有两个 end if啊  不是 一个if对应一个end if嘛
回复

使用道具 举报

发表于 2013-1-18 23:10 | 显示全部楼层
   If x = UBound(arr) Then Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
   If arr(x, 1) > 500 Then
      sr1 = sr
      x1 = x + 1
      Do
        x = x + 1
      Loop Until arr(x, 1) <= 500
      
      sr = sr & "A" & x1 & ":D" & x & ","
      If Len(sr) > 255 Then
        sr = sr1
        x = x1 - 1
        Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
        sr = ""
      End If
      x = x - 1
   End If
   兰版 我看24集我有点不大明白 不是一个if 对应一个end if嘛 怎么三个if对应两个end if 然后我加上一个end if 提示错误
回复

使用道具 举报

发表于 2013-3-3 09:11 | 显示全部楼层
[code]Sub 数组方法22()
Dim arr, t
Dim x As Integer, x1 As Integer
Dim sr As String, sr1 As String
清除颜色
t = Timer
arr = Range("d2:d" & Range("a65536").End(xlUp).Row)
For x = 1 To UBound(arr)
   If x = UBound(arr) Then Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
   If arr(x, 1) > 500 Then
      sr1 = sr
      x1 = x + 1
      Do
        x = x + 1
      Loop Until arr(x, 1) <= 500
            sr = sr & "A" & x1 & "D" & x & ","
      If Len(sr) > 255 Then
        sr = sr1
        x = x1 - 1
        Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
        sr = ""
      End If
      x = x - 1
   End If
Next
MsgBox Timer - t
End Sub
Sub 数组方法2()
Dim arr, t
Dim x As Integer, x1 As Integer
Dim sr As String, sr1 As String
清除颜色
t = Timer
arr = Range("d2:d" & Range("a65536").End(xlUp).Row)
For x = 1 To UBound(arr)
   If x = UBound(arr) Then Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
   If arr(x, 1) > 500 Then
      sr1 = sr
      x1 = x + 1
      Do
        x = x + 1
      Loop Until arr(x, 1) <= 500
            sr = sr & "A" & x1 & ":D" & x & ","
      If Len(sr) > 255 Then
        sr = sr1
        x = x1 - 1
        Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
        sr = ""
      End If
      x = x - 1
   End If
Next x
MsgBox Timer - t
End Sub
兰老师,你好!
为什么手工输入的22()与2()复制老师的完全一样,但是22()的 Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
出现错误提示
回复

使用道具 举报

发表于 2013-3-10 15:46 | 显示全部楼层
本帖最后由 leessn 于 2013-3-10 15:59 编辑

Sub 数组方法()
Dim arr, t
Dim x As Integer
Dim sr As String, sr1 As String
清除颜色
t = Timer
arr = Range("d2:d" & Range("a65536").End(xlUp).Row)
For x = 1 To UBound(arr)
   If x = UBound(arr) And sr <> "" Then Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
   If arr(x, 1) > 500 Then
      sr1 = sr
      sr = sr & "A" & x + 1 & ":D" & x + 1 & ","

      If Len(sr) > 255 Then
        sr = sr1
        Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
        sr = ""
      End If
   End If
Next x
MsgBox Timer - t
End Sub
如果把橙色的两句调换,则会提示“方法range作用于对象Global时失败”,我想问一下这是为什么?谢谢!!(后来重看视频,终于明白了!!!!)
回复

使用道具 举报

发表于 2013-3-10 21:22 | 显示全部楼层
本帖最后由 leessn 于 2013-3-10 21:39 编辑
chqyz 发表于 2011-8-10 17:24
请教老师,关于数组2中的疑问:
For x = 1 To UBound(arr)
   If x = UBound(arr) Then Range(Left(sr,  ...

我觉得可以去掉最后的”x=x-1"。
当len(sr)>255的时候,执行下面的代码:
If Len(sr) > 255 Then
        sr = sr1
        x = x1 - 1
        Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
        sr = ""
      End If
也就是说x倒回到“x1-1"的位置了,而”x1-1"肯定是小于或等于“x-1"的!
当len(sr)<=255的时候,arr(x,1)刚好就是下一个要判断的对象,没必要再倒回到”x-1"的位置。

不知道这样理解对不对,请老师指教,谢谢!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 13:24 , Processed in 0.200730 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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