excel 如果两个值相同,如何填充活动单元格下方单元格的颜色?

igsr9ssn  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(631)

我有一组数据,其中一列包含两个特定的值,这两个值应该在每行中交替出现。
数据如下所示:
显然我还不能发布图片。例子是这样的:
C2:断裂C3:正常C4:断裂C5:正常C6:正常C7:中断C8:正常

目标是将单元格C6填充为红色。
工作表中的列数每周都会变更,但“中断、正常、中断”的模式应该保持一致。当“中断、正常、正常”出现时,最后一个“正常”必须填入,以表示缺少中断。
我的解决方案是从C2开始,如果C3等于C2,则将C3填充为红色。然后,向下移动一行并重复检查,直到列表的末尾。此逻辑将指示当C5处于活动状态时,C6变为红色。
我没有编程背景,所以我不确定我是否以正确的方式处理这个问题,但下面是我的代码:

Sub Compare_Rows()

   
    Range("C2").Select
     
    If (ActiveCell.Value = ActiveCell.Offset(1, 0).Value) Then
        ActiveCell.Offset(1, 0).Interior.ColorIndex = 3
    
    End If

        Do Until IsEmpty(ActiveCell)
        
        ActiveCell.Offset(1, 0).Select
    Loop
        

End Sub

回顾一下,我在If和Loop行添加了一个断点,程序一次选择一行单元格。在本例中,当C5处于活动状态时,If行中两个值的工具提示确认满足条件(相同值),但目标单元格保持无颜色。
ColorIndex的工具提示始终显示颜色索引“-4142”。

lf5gs5x2

lf5gs5x21#

请使用下一个代码。它将范围放置在数组中,以加快迭代/处理速度,并构建一个Union范围的重复单元格值,at once

Dim sh As Worksheet, lastR As Long, rngCol As Range, arr, i As Long
   
   Set sh = ActiveSheet
   lastR = sh.Range("C" & sh.rows.count).End(xlUp).row
   
   arr = sh.Range("C1:C" & lastR).Value2
   
   For i = 2 To UBound(arr)
        If arr(i, 1) = arr(i - 1, 1) Then addToRange rngCol, sh.Range("C" & i)
   Next i
   If Not rngCol Is Nothing Then rngCol.Interior.Color = vbRed
End Sub

Sub addToRange(rngU As Range, rng As Range)
    If rngU Is Nothing Then
        Set rngU = rng
    Else
        Set rngU = Union(rngU, rng)
    End If
End Sub

您的程式码在到达第一个空白储存格之前,不会执行任何循环...

相关问题