VBA - 格式化内部颜色,但既不适用于单个单元格,也不适用于整行

问题描述 投票:0回答:1

我无法使用条件格式,因为它使 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 format conditional-formatting
1个回答
0
投票

令我惊讶的是,使用条件格式会使您的 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 行)

© www.soinside.com 2019 - 2024. All rights reserved.