dynamicselect部分行来着色单元格

我想改变单元格的背景颜色,但不是整个行,基于单元格的值。 我有一些代码可以实现我想要的function,但是我确定有一个更高效的方法,希望在提高代码效率方面有所帮助。 下面列出的是执行任务的代码片段。

Sub chg_bkgrnd_Color() Dim rng As Range Dim row As Range Dim cell As Range Dim counter As Long Set rng = Range("k2:k23") Range("k2").Select For Each cell In rng Select Case cell.Value Case Is = "Closed" ActiveCell.Offset(counter, -10).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -10).Interior.TintAndShade = -0.249977111117893 ActiveCell.Offset(counter, -9).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -9).Interior.TintAndShade = -0.249977111117893 ActiveCell.Offset(counter, -8).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -8).Interior.TintAndShade = -0.249977111117893 ActiveCell.Offset(counter, -7).Interior.ThemeColor = xlThemeColorDark1 ActiveCell.Offset(counter, -7).Interior.TintAndShade = -0.249977111117893 End Select counter = counter + 1 Next End Sub 

条件格式是最好的,但如果你想使用正常的格式,这是一个简化版本的代码:

 Sub chg_bkgrnd_Color() Dim i& For i = 2 To 23 If Cells(i, 11) = "Closed" Then With Range(Cells(i, 1), Cells(i, 4)).Interior .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.249977111117893 End With End If Next End Sub 

根据@ Jeeped的build议,这是一个使用自动化的版本。 在工作表的代码模块中,放置这个:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) RangeAutoBackFill "Closed", 11, 2, 23, 1, 4, xlThemeColorDark1, -0.249977111117893 End Sub 

然后在一个标准的代码模块中,放置这个:

 Public Sub RangeAutoBackFill(Key$, KeyCol&, KeyRowLow&, KeyRowHigh&, FillColLow&, FillColHigh&, FillTheme&, FillTint#) Dim i& For i = KeyRowLow To KeyRowHigh If Cells(i, KeyCol) = Key Then With Range(Cells(i, FillColLow), Cells(i, FillColHigh)).Interior .ThemeColor = FillTheme .TintAndShade = FillTint End With End If Next End Sub 

您正在询问如何根据列K中相应的值是否为“已closures”来获取列A:D中的单元格。 条件格式是一个更好的解决scheme,因为它立即为列K中的更改提供自动的后台响应。

 Sub Create_Conditional_Formatting_for_AD_based_on_K_Closed() Dim v As Long, vSTATEs As Variant, vCOLOURs As Variant vSTATEs = Array("Open", "Closed", "Pending") vCOLOURs = Array(3, 10, 5) With ActiveSheet.Columns("A:D") .FormatConditions.Delete For v = LBound(vSTATEs) To UBound(vSTATEs) With .FormatConditions.Add(Type:=xlExpression, _ Formula1:="=$K1=" & Chr(34) & vSTATEs(v) & Chr(34)) With .Interior .ColorIndex = vCOLOURs(v) End With .StopIfTrue = True End With Next v End With End Sub 

此例程可能非常适合您想要将CF规则应用于大量工作表或作为定期导入新工作表的循环任务的情况,但可能比仅手动创build六个规则更有效。

我使用.ColorIndex属性简化了回填颜色的select。 您可以在这里findColorIndex数字和颜色的表格。

请注意,我正在删除先前的CF规则,并且在构build新的规则之前先将其应用于A:D列。 这可能是一个考虑,如果你有其他CF规则pipe理行A列:D。

在CF规则中使用公式并使用绝对$指标locking列K引用,可以实现适用于:与正在评估的列不同。 使用主页►条件格式►pipe理规则查看结果。

手动方法:

  1. select列A:D与A1作为ActiveCell
  2. select首页►条件格式►新build规则
  3. select使用公式来确定哪些单元格进行格式化,并提供以下公式为true格式值中的以下内容文本框:

    =$K1="closed

  4. 点击格式,然后从“ 填充”选项卡中select合适的高亮组合。
  5. 单击确定接受格式更改,然后再次确定以创build规则。
  6. 转到步骤2并根据需要重复。 如果您从首页►条件格式►pipe理规则开始并select新build,您可以保存几次点击。

你的结果应该类似于以下内容。

基于另一列条件格式化特定列