我无法使用条件格式,因为它使 Excel 文档表非常缓慢,因此我想使用 VBA 来实现此目的。
我的代码可以工作,但我需要稍微调整一下。 请参阅下面描述的问题代码。 这是使用的代码:
Sub abcd()
For Each r In Range("B8:B500").SpecialCells(xlCellTypeConstants)
r.Interior.ColorIndex = xlNone
If r.Value Like "1" Then r.Interior.Color = vbYellow
If r.Value Like "2" Then r.Interior.Color = vbRed
Next
End Sub
问题/疑问:
下面的代码可以工作,但是它只能使包含“1”和“2”的单元格变成黄色/红色。
假设 B9 的单元格值为 1,那么我希望范围 A9:T9 为黄色。
或者笼统地说:范围 Ax:Tx 其中 x 可以是任何数字。
PS:我不想给整行上色,只想从A到T上色。
令我惊讶的是,使用条件格式会使您的 Excel 运行缓慢。无论如何,如果你想使用 VBA:
您的问题不是关于格式化本身,而是如何连续访问从 A 列到 T 列的单元格。有很多方法可以做到这一点。当
r
包含值为 1(或 2)的单元格并且位于 B 列中时,您可以使用以下任意一个:
r.Offset(0, -1).Resize(1, 20).Interior.Color = vbYellow
Range(Cells(r.row, 1), Cells(r.row, 20).Interior.Color = vbYellow
Range(Cells(r.row, "A"), Cells(r.row, "T").Interior.Color = vbYellow
Range("A" & r.row & ":T:" r.row).Interior.Color = vbYellow
第一种方法使用
Offset
函数访问 A 列(距 B 列 -1 列)的单元格,并使用 Resize
函数获取行高为 1、列数为 20 的范围。
第二个和第三个方法使用具有two参数的范围函数,定义范围的开始和结束单元格。这些单元格由
Cells
函数定义,该函数获取行号和列号作为参数。列可以通过数字(1 = A,20 = T)或列字符指定。
第四种方法使用 Range 函数和 one 参数定义范围,就像在 Excel 中一样(例如
"A2:T2"
表示第 2 行)