更改一系列单元格的单元格值,而不包含多个if语句

时间:2015-10-28 15:02:39

标签: excel excel-vba vba

我想根据相邻单元格的值更改单元格的颜色。以下代码适用于单个单元格,但我希望它适用于一系列单元格,目前它查看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

3 个答案:

答案 0 :(得分:1)

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

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

注意如何不是直接引用&#34; S5&#34;而是代码引用Si [对于我的任何数字,从5开始并逐行逐行到100]。

答案 1 :(得分:0)

EXCEL中的条件格式化可能是处理此问题的最佳方式:

等级'Eh'培根为这样做提供了一个很好的解决方案,这是可以接受的。如果您需要使这些操作更加模块化,这是另一种解决方案应该可以正常工作并允许一些不同的基于数学的列/行解决方案。

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

Range Offset Information

答案 2 :(得分:0)

这是一种有趣的方法:

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

这个小型解决方案包含了许多学习机会,可以远远超出这个问题。

请注意,您的颜色编号可以在第一行的末尾进行编辑。

以下是发生的事情。

我们使用Evaluate函数来评估一个公式,该公式采用您的值范围T5:T100并生成一个颜色数组。

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

具有挑战性的部分是创建将产生适当颜色数组的公式。 :)