分享

VBA数组与单元格格式

 先生草堂 2016-12-02

'数组也可以设置格式?

'数组除了数字类型外,当然没有颜色、字体等格式,但是别忘了range对象可以表示多个连续或不连续的单元格区域

'利用上述特点,我们就是要数组构造单元格地址串,然后批量对单元格进行格式设置。

'注意,单元格地址串不能>255,所以如果单元格操作过多,我们还需要分次分批设置单元格格式

Sub 填充颜色()

Range('a2:d2,a7:d7,a10:d10').Interior.ColorIndex = 3

End Sub




Option Explicit


Sub 单元格循环()

Dim x As Integer

Dim t

清除颜色

t = Timer

For x = 2 To Range('a65536').End(xlUp).Row

If Range('d' & x) > 500 Then

Range(Cells(x, 1), Cells(x, 4)).Interior.ColorIndex = 3

End If

Next x

MsgBox Timer - t

End Sub


Sub 清除颜色()

Range('a:d').Interior.ColorIndex = xlNone

End Sub


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

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

Sub 数组方法3()

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 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

Next x

MsgBox Timer - t

End Sub


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多