數(shù)組也可以設(shè)置格式么汽绢?
數(shù)組除了數(shù)字類型外,當(dāng)然沒(méi)有顏色卷玉,字體等格式哨颂,但是range對(duì)象可以表示多個(gè)連接或者不連接的區(qū)域。利用這個(gè)特點(diǎn)相种,我們就是要數(shù)組構(gòu)造單元格地址串威恼,然后批量對(duì)單元格進(jìn)行格式設(shè)置。注意的地方是寝并,單元格的地址串不能大于255箫措,如果單元格操作過(guò)多,我們還需要分次分批設(shè)置單元格格式衬潦。
根據(jù)一個(gè)sheet的產(chǎn)品數(shù)量單價(jià)金額斤蔓,如果金額大于五百,則將當(dāng)前行填充為綠色镀岛。
第一種方法單元格填充
Sub 單元格填充()
Dim x As Integer
For x = 2 To Range("d65535").End(xlUp).row
If Range("d" & x) > 500 Then
Range(Cells(x, 1), Cells(x, 4)).Interior.ColorIndex = 5
End If
Next x
End Sub
第二種方法數(shù)組填充
2.1 符合條件的每一行的單元格地址構(gòu)成一個(gè)數(shù)組弦牡,對(duì)數(shù)組進(jìn)行操作。
Sub 數(shù)組方法()
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 = 4? '這是對(duì)單元格最后一批的填充漂羊,如果地址串大于255驾锰,則無(wú)法進(jìn)行操作,這是進(jìn)行一次判斷走越,如果運(yùn)行到最后稻据,并且SR 不為空,則對(duì)區(qū)域進(jìn)行顏色填充。
If arr(x, 1) > 500 Then
sr1 = sr
sr = sr & "A" & x + 1 & ":D" & x + 1 & ","???? ‘sr是個(gè)不斷增加的單元格地址串捻悯,最后是一個(gè)逗號(hào)
If Len(sr) > 255 Then
sr = sr1??? ?‘重新讓sr等于sr1,sr1是在連接之前的地址串
Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 4 '把sr最后的那個(gè)逗號(hào)去掉匆赃,否則系統(tǒng)會(huì)提示出錯(cuò)
sr = ""
End If
End If
Next x
End Sub
2.2 有一些連續(xù)的單元格都符合條件,將符合條件的單元格地址合并今缚,減少字符串的數(shù)量算柳。
如A15:D15,A16:D16姓言,A17:D17瞬项,A18:D18,地址可以簡(jiǎn)寫為A15:D18
Sub 數(shù)組方法2()
Dim arr, t
Dim x As Integer, x1 As Integer
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 = 6
If arr(x, 1) > 500 Then
sr1 = sr
x1 = x + 1 ‘恢復(fù)的時(shí)候能用上何荚,實(shí)際的行和數(shù)組的行正好差1
Do
x = x + 1
Loop Until arr(x, 1) <= 500?? '在第15行囱淋,發(fā)現(xiàn)值大于500,接著循環(huán)餐塘,16行循環(huán)妥衣,大于500,17行大于500戒傻, 18行大于500税手,直到第19行,arr的值小于500需纳,循環(huán)停止芦倒。
sr = sr & "A" & x1 & ":D" & x & ","
If Len(sr) > 255 Then
sr = sr1
x = x1 - 1? ’為什么需要減1, 因?yàn)樯厦娴腄O循環(huán)中不翩,不論是否符合條件兵扬,x都要加1
Range(Left(sr, Len(sr) - 1)).Interior.ColorIndex = 5
sr = ""
End If
x = x - 1 'do 循環(huán)引起的, x 還需要減一
End If
Next x
End Sub
2.3 更加簡(jiǎn)化字符串地址長(zhǎng)度,如將A15:D18簡(jiǎn)寫為15:18口蝠,占用的字符串更少器钟,所以在一個(gè)255的字符串長(zhǎng)度限制中包括更多的單元格。
交集的方法:第二行到第七行與第一列到第四列的交集亚皂,即可滿足填充條件
Sub 數(shù)組方法3()
Dim arr
Dim x As Integer, x1 As Integer
Dim sr As String, sr1 As String
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 = 7
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 = 8
sr = ""
End If
x = x - 1
End If
Next x
End Sub