【问题标题】:Excel Conditional Formatting row background, skip cells with existing manual formattingExcel 条件格式行背景,使用现有手动格式跳过单元格
【发布时间】:2018-10-26 18:26:42
【问题描述】:

我正在寻找是否有人能够将条件格式应用于一行但跳过已经具有背景颜色的单元格。

我有一个电子表格,它使用 Get & Transform 从 SQL 数据库中提取数据到选项卡 1。

然后,该数据会根据一个共同值与“工作表”选项卡中的现有数据合并。我以相同的列顺序获取两组数据,然后通过宏标记任何新数据已从旧(工作表)数据更改的位置,方法是将背景颜色更改为紫色。我也把字体加粗。

这样做是为了直观地标记该单元格值自上次刷新数据后发生了变化并突出显示。这是通过条件格式完成的,其中新数据 旧数据( D2 CQ2 然后变为粗体紫色)。 这被复制到第三个选项卡,然后是一个宏步骤,然后运行并将值设置为显示的值。

For Each aCell In mySel
         With aCell
           .Font.FontStyle = .DisplayFormat.Font.FontStyle
           .Interior.Color = .DisplayFormat.Interior.Color
           .Font.Strikethrough = .DisplayFormat.Font.Strikethrough
           .Interior.Pattern = .DisplayFormat.Interior.Pattern
         End With
     Next aCell

然后删除现有工作表数据并用新数据替换。一切正常。

在“工作表”选项卡上有一个单元格,用户可以在其中输入数字并通过条件格式更改整行以匹配与该 # 设置的颜色。 (IE 1 = 绿色,2 = 黄色,3 = 红色,...)

如果该行已经具有这些设置之一(在刷新过程中确实被复制)会发生什么情况是整行现在是绿色、红色、黄色、./.. 但现在格式化为紫色的内容已被行级条件格式替换。

我们希望将任何单个单元格设置为紫色,而该行的其余部分可以是选定的颜色。

仅设置行级指示符或标志来表示已更改的内容是不够的,因为数据跨越 A - BV 列。

例如,如果颜色代码选择是 1,这里是代码:

Selection.FormatConditions(1).StopIfTrue = False
    Range("A2:BV99999").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$BS2 = 1"
    Selection.FormatConditions       (Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.399914548173467
    End With

所以基本上我希望将上述内容应用于行范围内的所有单元格,除了那些已经设置了背景颜色的单元格。

最好在条件格式语句中执行此操作,因此如果已经有一个没有行级别格式的紫色单元格,如果用户随后设置此紫色单元格保持紫色,而其他单元格更改为所选颜色。

这可能吗?

(如果它是粗体的,我可能会逐个查看单元格并删除条件格式并重新格式化为紫色,但以 A3..BV1000 为例,这很慢)

2018 年 5 月 17 日 我把事情简化了一点。我需要应用 GMalc 建议的地方是行条件格式的代码。 我试过了:

Selection.FormatConditions(1).StopIfTrue = False
    Range("A2:BV99999").Select
   ' Range("BZ2").Activate
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$BS2 = 6"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    If Not Selection.Interior.Color = 153164535 Then 'have also tried vbLavender
    With Selection.FormatConditions(1).Interior
      '  .PatternColorIndex = 0
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
      '  .PatternTintAndShade = 0
    End With
    End If

整行仍为浅灰色。如果我删除 BS 列中的 6,则会出现薰衣草背景。我尝试将 IF NOT 更改为 IF 并且即使单元格中没有颜色,仍然格式化整行。

所以这确实是我需要让魔法发生的地方,将行中的所有单元格着色为所需的颜色,除非它是薰衣草色,然后不要更改该单元格的背景颜色。

【问题讨论】:

    标签: excel conditional-formatting vba


    【解决方案1】:

    使用Not aCell 添加一个IF 语句,您可能需要将vbMagenta 更改为正确的颜色。

    For Each aCell In mySel
        If Not aCell.Interior.Color = vbMagenta Then 'add this line
             With aCell    
               .Font.FontStyle = .DisplayFormat.Font.FontStyle
               .Interior.Color = .DisplayFormat.Interior.Color
               .Font.Strikethrough = .DisplayFormat.Font.Strikethrough
               .Interior.Pattern = .DisplayFormat.Interior.Pattern
             End With
        End If  'add this line
    Next aCell
    

    【讨论】:

    • 感谢 GMalc。我在 2018 年 5 月 18 日添加到我的问题底部,因为我无法在回复中输入太多字符。仍然没有做我们希望它做的事情。
    猜你喜欢
    • 2018-05-10
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多