簡體   English   中英

更改一系列單元格的單元格值,而無需多個if語句

[英]Changing cell value for a range of cells without multiple if statments

我想根據相鄰單元格的值更改單元格的顏色。 以下代碼可在單個單元格上正常運行,但我希望將其應用於一定范圍的單元格,當前它查看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”,而是直接引用Si(無論i是多少,從5開始並逐行到100)。

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

范圍偏移信息

這是一種有趣的方法:

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。

具有挑戰性的部分是創建公式,以生成正確的顏色數字數組。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM