【问题标题】:Conditional Formatting of Cells to the LEFT/RIGHT of Cells that Contain Specific Text Beginning With单元格的条件格式设置为包含以开头的特定文本的单元格的左/右
【发布时间】:2018-01-26 04:44:10
【问题描述】:

我正在寻找可以将条件格式(特别是填充颜色)应用到包含以“P”开头的特定文本的单元格左侧或右侧的空白单元格的公式或 VBA 代码。我附上了一张我想要实现的截图。

Excel Screenshot

如果 B 列中相邻的单元格包含以“P”开头的文本,我希望 A 列中单元格的填充颜色变为蓝色,如果文本为“T”,则变为粉红色等。

我之前实现此目的的方法是使用宏从 F 列复制数据并将其粘贴到 A、G、M 列,然后使用以下规则对这些列应用条件格式:单元格值以“P”开头,然后将填充颜色和文本更改为相同的颜色,以显示为实心。

它很老套,但很有效,不幸的是,在打印时,单元格的文本仍会显示在填充背景颜色的背景下。这不是世界末日,但我想知道是否有更正确的方法来实现这一目标。有没有办法抵消格式适用于哪些单元格?感谢您提供任何帮助!

【问题讨论】:

    标签: excel excel-formula conditional-formatting vba


    【解决方案1】:

    选择列 A、F 和 M,并将 F1 作为活动单元格。使用以下公式创建新的 CFR。

    =or(iferror(left(e1)="P", false), left(g1)="P")
    

    在 VBA 中创建它的问题在于公式; A 列左侧没有列,并且三列的任何联合将始终将 A1 视为“活动单元格”,无论联合是如何创建的。 .Range("G:G, M:M, A:A,") 与 .Range("A:A, G:G, M:M"); A1 是“活动单元格”。一种解决方案是临时切换到 xlR1C1,其中 RC[-1] 可用于引用 A 列左侧不存在的列。

    Option Explicit
    
    Sub meh()
        Dim refStyle As Long, xlR1C1formula As String
    
        'store original reference style
        refStyle = Application.ReferenceStyle
        'make it xlR1C1 reference style
        Application.ReferenceStyle = xlR1C1
    
        With Worksheets("sheet1")
            With .Range("A:A, G:G, M:M")
                .FormatConditions.Delete
    
                xlR1C1formula = "=or(iferror(left(rc[-1])=char(80), false), left(rc[1])=char(80))"
                With .FormatConditions.Add(Type:=xlExpression, Formula1:=xlR1C1formula)
                    .Interior.ColorIndex = 5
                    .NumberFormat = ";;;"
                End With
    
                xlR1C1formula = "=or(iferror(left(rc[-1])=char(84), false), left(rc[1])=char(84))"
                With .FormatConditions.Add(Type:=xlExpression, Formula1:=xlR1C1formula)
                    .Interior.ColorIndex = 22
                    .NumberFormat = ";;;"
                End With
            End With
    
            'switch back
            Application.ReferenceStyle = refStyle
        End With
    End Sub
    

    【讨论】:

    • 顺便说一句,如果您希望单元格文本/值“消失”,请不要设置字体颜色;设置;;;的自定义数字格式。
    • 感谢 Jeeped 提供的这两个出色的解决方案。但是,我在使用 vba 实现这一点时遇到了一些麻烦。当我手动按照您在 gif 中的解决方案时,它可以按预期完美运行,但是当我尝试使用宏时,列 M 没有被格式化。这是我正在使用的 code,这是 result。感谢您的任何帮助!
    • 查看我上面的 VBA 解决方案。我使用 char(80) 和 char(84) 来确定 P 和 T,因为我讨厌在带引号的字符串中加倍双引号。
    【解决方案2】:

    我要做的第一件事是通过公式>定义名称>定义名称,称为此处,使用以下公式:

    =INDIRECT(ADDRESS(ROW(),COLUMN(),4))

    然后,在“主页”>“样式”>“条件格式”>“新规则”下,在要受影响的单元格上使用此公式:

    =IF(AND(Here="",OR(LOWER(LEFT(OFFSET(Here,,1),1))="p",LOWER(LEFT(OFFSET(Here,,-1),1))="p")),TRUE,FALSE)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多