【问题标题】:conditional highlighting based on values基于值的条件突出显示
【发布时间】:2019-02-14 00:03:57
【问题描述】:

我已经根据单元格中的关键字定义了一个用颜色填充的范围。目的是突出显示关键字,如下图所示。可以看到搜索了“自动”一词,并且该单元格被标记为红色。我遇到困难的地方是将“if”命令(例如搜索条件)延伸到列 E 中,查看关键字“Mortgage”、“Preferred”和“non-Preferred”,并用一些颜色标记它。这些关键字始终位于“E”行和关键字“Auto”旁边的前四列中。麻烦的是,“Mortgage”、“Preferred”和“non-Preferred”这三个关键字并不总是以相同的顺序出现。它可能是 关键字“preferred”可能出现在“Mortgage”之前。

因此,我的主要问题是 VBA 中是否有一个命令,以便这些关键字的突出显示以动态方式完成,而不使用静态列号,因为这些关键字的顺序可以改变。

 Sub Schaltfläche2_Klicken()
 Dim cell As Range

 For Each cell In ws.Range("A1:A100")
 If cell.Value = "Auto" Then
    Range("A" & cell.Row, "E" & cell.Row, "G" & cell.Row, "I" & cell.Row, "K" & 
cell.Row).Interior.Color = vbRed
ElseIf cell.Value = "Mutti" Then
    Range("A" & cell.Row, "E" & cell.Row, "G" & cell.Row, "I" & cell.Row, "K" & 
cell.Row).Interior.Color = vbRed
End If
Next
End Sub

【问题讨论】:

  • 您可能需要添加更多示例,说明关键字“Mortgage”、“Preferred”和“non-Preferred”的可能分散
  • 刚刚做了。谢谢你的建议

标签: vba formatting conditional highlight


【解决方案1】:

在 OP 关于避免白色的评论后编辑

你可以试试这个(cmets 中的解释):

Sub Schaltfläche2_Klicken()
    Dim cell As Range, cell2 As Range, col As Long
    Dim ws As Worksheet
    Dim res As Variant

    Set ws = ActiveSheet

    For Each cell In ws.Range("A1:A100").SpecialCells(xlCellTypeConstants) ' loop thorugh column A not empty values
        Select Case cell.Value2 ' check current column A cell value and act accordingly
            Case "Auto"
                col = vbRed
            Case "Mutti"
                col = vbGreen ' change it as per your needs
            Case Else 'if no match
                col = 0
        End Select
        If col > 0 Then ' proceed only if a color has been established
            cell.Interior.Color = col
            For Each cell2 In cell.Offset(, 4).Resize(4).SpecialCells(xlCellTypeConstants)
                res = Switch(cell2.Value = "Mortgage", vbRed, cell2.Value = "Preferred", vbGreen, cell2.Value = "Nonpreferred", vbYellow) ' get color corresponding to cell value (change colors as per your needs)
                If Not IsNull(res) Then Intersect(Range("E:E, G:G, I:I"), Rows(cell2.Row)).Interior.Color = CLng(res) ' if any valid color, apply it
            Next
        End If
    Next
End Sub

查看here 了解Switch() 功能

如果您需要不同于标准颜色的颜色,您可以使用RGB()函数代替

【讨论】:

  • 说真的,这是解决方案。不知道这是否可能。谢谢,也谢谢你提供的教程链接,我会研究一下。
  • 不客气。请注意,我编辑了代码以将 cell.Interior.Color = vbRed 更改为 cell.Interior.Color = col
  • 宏将不符合条件的单元格标记为白色。是否有可能保留不符合标准的单元格形式?我已经尝试过“xlNone”,但即使它也将不符合标准的单元格标记为白色。
  • 就是这样。谢谢你。它做了它应该做的事情。
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 2020-05-15
  • 1970-01-01
相关资源
最近更新 更多