突出显示匹配的单元格

时间:2021-04-13 12:10:27

标签: excel

我正在寻找一个宏,如果这些单元格的值与当前选定的单元格相同,它将自动突出显示当前工作表中的任何单元格。因此,如果当前选择了单元格 B2,并且它包含值 7,那么所有其他值为 7 的单元格将被突出显示。这是用于数独谜题的 9x9 网格。 范围是 B2:J10。注意:不要选择和突出显示空白单元格,如果可能的话,如果不使用则禁用的方法。列出了一个已有 10 年历史的解决方案,但它突出显示了所有匹配数字的整个工作表,如果您单击一个空白单元格,它会突出显示所有 1 亿个空白单元格(只是猜测),这就是为什么我需要 Range 作为提到了。

2 个答案:

答案 0 :(得分:1)

我没有时间给你写代码,但是一些提示:

  • 使用 Worksheet_SelectionChange() 事件在选择新单元格时触发
  • 使用 Dim Cell as RangeFor each Cell in MySheet.Range("B2:J10") 循环检查相关范围内的所有单元格
  • 循环中的基本 if 语句应该可以解决问题; If Cell.Value = Selection.Value Then
  • 如果您希望代码在选择空白单元格时不触发,可能需要在开始时将其添加为 If 语句 - 'if selection is blank then exit sub' 之类的东西。

这应该是您需要的所有指示 - 交给您尝试并找出适合您的具体细节(要突出显示什么颜色/风格等)。

答案 1 :(得分:1)

在下面的代码中,我只是使用条件格式来突出显示值为浅红色的所有单元格。我还添加了一个 If else 语句,以便在选择为空白时不突出显示任何单元格。

我建议您转到开发人员选项卡创建一个宏并为其分配一些快捷方式(Ctrl + Shift 快捷方式),以便您每次选择单元格时都可以轻松调用它。创建宏后,复制此代码并将其粘贴到 VBA 编辑器中。

此外,如果此解决方案适合您,请选择此作为已接受的答案。谢谢!

Sub Final()
Dim var As Double
var = ActiveCell.Value

Range("B2:J10").Select
Selection.FormatConditions.Delete

If var <> 0 Then
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:=var
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("B2").Select
Else
    Range("B2").Select
    Exit Sub
End If
End Sub