将单元格的条件格式设置为包含特定文本开头的 LEFT/RIGHT 个单元格
Conditional Formatting of Cells to the LEFT/RIGHT of Cells that Contain Specific Text Beginning With
我正在寻找一个公式或 VBA 代码,它们可以将条件格式(特别是填充颜色)应用到包含以以下内容开头的特定文本的单元格左侧或右侧的空白单元格:"P"。我附上了我想要实现的目标的屏幕截图。
Excel Screenshot
如果 B 列中它旁边的单元格包含以 "P" 开头的文本,我希望 A 列中单元格的填充颜色更改为蓝色,如果文本为 "T",则更改为粉红色,等等
我之前实现此目的的方法是使用宏从 F 列复制数据并将其粘贴到 A、G、M 列,然后使用以下规则对这些列应用条件格式:单元格值以 [= 开头22=],然后将填充颜色和文本更改为相同的颜色以显示为纯色。
它有点笨拙,但很有效,不幸的是,在打印时,单元格的文本仍会显示在填充背景色的映衬下。这不是世界末日,但我想知道是否有更正确的方法来实现这一目标。有没有办法抵消格式适用于哪些单元格?感谢您的帮助,谢谢!
我要做的第一件事是通过公式 > 定义名称 > 定义名称创建定义名称,称为 Here,使用以下公式:
=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)
Select A、F 和 M 列,F1 作为活动单元格。使用以下公式创建新的 CFR。
=or(iferror(left(e1)="P", false), left(g1)="P")
在 VBA 中创建这个的问题是公式; A 列的左侧没有列,并且三列的任何并集将始终将 A1 视为 'active cell',而不管并集是如何创建的。 .Range("G:G, M:M, A:A,") 与 .Range("A:A, G:G, M:M") 相同; A1 是 'active cell'。一种解决方案是暂时切换到 xlR1C1,其中 RC[-1] 可用于引用 A 列左侧的 non-existent 列。
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
我正在寻找一个公式或 VBA 代码,它们可以将条件格式(特别是填充颜色)应用到包含以以下内容开头的特定文本的单元格左侧或右侧的空白单元格:"P"。我附上了我想要实现的目标的屏幕截图。
Excel Screenshot
如果 B 列中它旁边的单元格包含以 "P" 开头的文本,我希望 A 列中单元格的填充颜色更改为蓝色,如果文本为 "T",则更改为粉红色,等等
我之前实现此目的的方法是使用宏从 F 列复制数据并将其粘贴到 A、G、M 列,然后使用以下规则对这些列应用条件格式:单元格值以 [= 开头22=],然后将填充颜色和文本更改为相同的颜色以显示为纯色。
它有点笨拙,但很有效,不幸的是,在打印时,单元格的文本仍会显示在填充背景色的映衬下。这不是世界末日,但我想知道是否有更正确的方法来实现这一目标。有没有办法抵消格式适用于哪些单元格?感谢您的帮助,谢谢!
我要做的第一件事是通过公式 > 定义名称 > 定义名称创建定义名称,称为 Here,使用以下公式:
=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)
Select A、F 和 M 列,F1 作为活动单元格。使用以下公式创建新的 CFR。
=or(iferror(left(e1)="P", false), left(g1)="P")
在 VBA 中创建这个的问题是公式; A 列的左侧没有列,并且三列的任何并集将始终将 A1 视为 'active cell',而不管并集是如何创建的。 .Range("G:G, M:M, A:A,") 与 .Range("A:A, G:G, M:M") 相同; A1 是 'active cell'。一种解决方案是暂时切换到 xlR1C1,其中 RC[-1] 可用于引用 A 列左侧的 non-existent 列。
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