当特定文本位于另一列中时,如何突出显示列中具有相同值的所有单元格
How to highlight all cells of the same value in a column when a specific text is in another column
您好,我正在尝试为此使用 VBA 或条件格式,但它无法按照我想要的方式工作:/
B 列是由不同的人一次输入一个值的列表,C 列是此人的状态。
我想要实现的目标:只有当 C 列为“OUT”时,相邻单元格(B 列)中的值才会被遮蔽,并且该单元格的所有相同值也会被遮蔽。
我可以对 C 列中给定“OUT”的 B 列单元格进行阴影处理,但我无法使之前的所有相同值也被阴影处理。
有 3 种可能的状态:NEW、AFTERNOON、OUT
有人有什么想法吗?我附上了一张照片希望它解释得更清楚
Is there a way to highlight more than 2 cells? If I have 3 of same value, only the last 2 duplicates will be highlighted – geravie498 5 hours ago
在这种情况下,您只需要一个规则。
我们假设数据在 B1:C10
中。相应地调整公式。
在$B:$B=$B1
和$C:$C="OUT"
下方的范围内匹配B1
的所有值
规则
=INDEX($B:$B,MATCH(1,($B:$B=$B1)*($C:$C="OUT"),0))
我真的很喜欢@Siddharth,但为了完整起见,您可以在 VBA 中使用以下方法:
将此代码粘贴到您 sheet 的模块
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, _
.Cells(.Rows.Count, 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, lCodesCol - 1), 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 代码都快得多,并且随着数据的增长,差异会越来越明显。
您好,我正在尝试为此使用 VBA 或条件格式,但它无法按照我想要的方式工作:/
B 列是由不同的人一次输入一个值的列表,C 列是此人的状态。 我想要实现的目标:只有当 C 列为“OUT”时,相邻单元格(B 列)中的值才会被遮蔽,并且该单元格的所有相同值也会被遮蔽。
我可以对 C 列中给定“OUT”的 B 列单元格进行阴影处理,但我无法使之前的所有相同值也被阴影处理。 有 3 种可能的状态:NEW、AFTERNOON、OUT
有人有什么想法吗?我附上了一张照片希望它解释得更清楚
Is there a way to highlight more than 2 cells? If I have 3 of same value, only the last 2 duplicates will be highlighted – geravie498 5 hours ago
在这种情况下,您只需要一个规则。
我们假设数据在 B1:C10
中。相应地调整公式。
在$B:$B=$B1
和$C:$C="OUT"
B1
的所有值
规则
=INDEX($B:$B,MATCH(1,($B:$B=$B1)*($C:$C="OUT"),0))
我真的很喜欢@Siddharth,但为了完整起见,您可以在 VBA 中使用以下方法: 将此代码粘贴到您 sheet 的模块
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, _
.Cells(.Rows.Count, 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, lCodesCol - 1), 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 代码都快得多,并且随着数据的增长,差异会越来越明显。