[英]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.