本帖最后由 zjdh 于 2012-9-4 19:53 编辑
宏的原意是将D列数据大于500的行A-D列底色改为红色,但是你的宏bug不少!
1. If x = UBound(arr) And sr <> "" Then Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
应该放在 Next x 之前,否则将遗漏对最后一个符合条件数据的处理!
2. if len(sr)>255 then 意思是字符串长度大于255时作一次处理,也可改成100、200....
range() 括弧内只能允许255个字符串,一旦字符串长度大于255,就将字符串退回到前一次记录,将记录的区域设置为
红色,但未处理本次记录 ,这次记录就丢失了!
不信你运行附件可得到验证(注意:45、89、117、150行)
应将宏改为:
Sub 数组方法2() '新宏
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 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 = "A" & x + 1 & ":D" & x + 1 & "," '记录本次符合条件的区域
End If
End If
If x = UBound(arr) And sr <> "" Then Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 3
'当处理到最后一个数据时对记录的区域作处理
Next x
MsgBox Timer - t ’统计显示运行时间
End Sub
Book3.rar
(9.8 KB, 下载次数: 1)