当特定文本在另一列中时如何突出显示列中具有相同值的所有单元格

问题描述

嗨,我正在尝试为此使用 VBA 或条件格式,但它无法按照我希望的方式工作:/

B 列是由不同的人一次键入一个值的列表,C 列是该人的状态。 我想要实现的目标:仅当 C 列为“OUT”时,相邻单元格(在 B 列中)中的值才会被着色,并且该单元格的所有相同值也会被着色。

我可以对 C 列中给出“OUT”的 B 列单元格进行着色,但我无法在着色之前获得所有相同的值。 有 3 种可能的状态:NEW、AFTERNOON、OUT

有人有什么想法吗?我附上了一张照片,希望它解释得更清楚

enter image description here

解决方法

有没有办法突出显示 2 个以上的单元格?如果我有 3 个相同的值,则只会突出显示最后 2 个重复项 – geravie498 5 小时前

在这种情况下,您只需要一个规则。

假设数据在 B1:C10 中。相应地调整公式。

匹配B1$B$1:$B$10=$B1以下范围内的所有$C$1:$C$10="OUT"

规则

=INDEX($B$1:$B$10,MATCH(1,($B$1:$B$10=$B1)*($C$1:$C$10="OUT"),0))

enter image description here

,

我真的很喜欢@Siddharth,但为了完整起见,您可以在 VBA 中做到这一点: 将此代码粘贴到工作表的模块中

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lCodesCol As Long: lCodesCol = 3
    If Target.Column <> lCodesCol And Target.Column <> lCodesCol - 1 Then Exit Sub
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    Dim vData As Variant
    Dim i As Long,j As Long
    Dim lFirstRow As Long: lFirstRow = 2
    Dim lLastRow As Long
    Dim rngToHighlight As Range
    
    With Me
        lLastRow = WorksheetFunction.Max(lFirstRow,_
                                         .Cells(.Rows.Count,lCodesCol).End(xlUp).Row,lCodesCol - 1).End(xlUp).Row)
        vData = .Range(.Cells(1,lCodesCol - 1),.Cells(lLastRow,lCodesCol)).Value
        
        For i = lFirstRow To lLastRow
            If vData(i,2) = "OUT" And vData(i,1) <> "" Then
                For j = lFirstRow To lLastRow
                    If vData(i,1) = vData(j,1) Then
                        If rngToHighlight Is Nothing Then
                            Set rngToHighlight = .Cells(j,lCodesCol - 1)
                        Else
                            Set rngToHighlight = Union(.Cells(j,rngToHighlight)
                        End If
                    End If
                Next j
            End If
        Next i
        
        With .Cells(lFirstRow,lCodesCol - 1).Resize(lLastRow,1).Interior
            .Pattern = xlNone
        End With
        
        If Not rngToHighlight Is Nothing Then
            With rngToHighlight.Interior
                .Pattern = xlSolid
                .Color = RGB(200,200,200)
            End With
        End If
    End With
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

请注意,条件格式比您可以编写的任何 vba 代码都要快得多,并且随着数据的增长,差异会变得更加明显。