更改一系列单元格的单元格值,但不包含多个单元格

我想根据相邻单元格的值更改单元格的颜色。 下面的代码适用于单个单元格,但是我希望它适用于一系列单元格,目前它查看S5的值并更改为T5的颜色,我希望对单元格范围进行迭代(S5至S100与T5至T100匹配)。 我怎么能做到这一点,而不需要为100单元做一个if语句?

If LCase(Sheets(1).Range("S5").Value) = "yes" Then Sheets(1).Range("T5").Interior.ColorIndex = 33 ElseIf Sheets(1).Range("S5").Value <> "" Then Sheets(1).Range("T5").Interior.ColorIndex = 19 Else Sheets(1).Range("T5").Interior.ColorIndex = 0 End If 

详细说明我的评论,你可以做这样的事情:

 For i = 5 to 100 If LCase(Sheets(1).Range("S"&i).Value) = "yes" Then Sheets(1).Range("T"&i).Interior.ColorIndex = 33 ElseIf Sheets(1).Range("S"&i).Value <> "" Then Sheets(1).Range("T"&i).Interior.ColorIndex = 19 Else Sheets(1).Range("T"&i).Interior.ColorIndex = 0 End If Next i 

请注意,代替直接引用“S5”,而不是直接引用“S5”,代码是指Si [无论我是什么数字,从5开始,逐行到100]。

EXCEL中的条件格式可能是处理这个问题的最好方法:

  • 条件格式

“Eh”培根为这样做提供了一个很好的解决scheme,这是可以接受的。 这是另一个解决scheme,如果您需要使这些操作更加模块化,应该可以正常工作,并允许一些基于math的列/行解决scheme。

 Set myRange = Range("S5:S100") For Each cell in myRange If LCase(cell.Value) = "yes" Then cell.Offset(0, 1).Interior.ColorIndex = 33 ElseIf LCase(cell.Value) = "no" Then cell.Offset(0, 1).Interior.ColorIndex = 19 Else cell.Offset(0, 1).Interior.ColorIndex = 0 End If Next 

范围偏移信息

这是一个有趣的方法来做到这一点:

 Const FORMULA = "CHOOSE(MMULT(--(~>{""yerz"",""""}),{1;1})+1,0,19,33)" With [t5:t100] v = Evaluate(Replace(FORMULA, "~", .Address)) For i = 1 To .Count .Item(i, 2).Interior.ColorIndex = v(i, 1) Next End With 

这个小型的解决scheme包含了很多学习机会,可以远远超出这个问题。

注意你的颜色编号可以在第一行的末尾编辑。

这是发生了什么事。

我们使用评估函数来评估一个公式,其中取值范围为T5:T100并生成一个颜色数组。

然后,我们将数组中的每个值分配给单元格的ColorIndex。

具有挑战性的部分是创build公式,将导致适当的颜色数组arrays。 🙂