[英]Apply Conditional Formatting to Adjacent Cells?
我有一些文本数据想要搜索并突出显示。
它是每天/每月/每年的任务,按频率组织(并按组分开)...所以我有一个单独的框用于每天,每周等。
每个组有3列...“类型”,“频率”和“描述”。
我有一个Listbox
,其中包含所有任务类型,当您选择一个Listbox
并按一个按钮时,它会突出显示与之相对应的所有任务...
到目前为止,我能够做到这一点的唯一方法是通过VBA条件格式。
但是它仅突出显示任务的类型,我无法弄清楚如何使其突出显示任务旁边的两列...
我正在探索如何通过搜索执行此操作,但是无法正确实现。
这是我的代码
Private Sub CommandButton1_Click()
Dim typeSelection As String
Dim rng As Range
Set rng = Sheet4.Range("$E$3:$O$23")
typeSelection = ListBox1.Text
Debug.Print rng.Address
With rng
.FormatConditions.Delete
.FormatConditions.Add Type:=xlTextString, String:=typeSelection, _
TextOperator:=xlBeginsWith
.FormatConditions(1).Interior.Color = RGB(255, 0, 0)
.FormatConditions(1).Font.Bold = True
'Debug.Print .FormatConditions(1).AppliesTo.Address
'.FormatConditions(1).ModifyAppliesToRange .FormatConditions(1).AppliesTo.Offset(RowOffSet:=0, ColumnOffset:=2)
'.FormatConditions(1).Interior.Color = RGB(255, 0, 0)
'.FormatConditions(1).Font.Bold = True
'Debug.Print .FormatConditions(1).AppliesTo.Address
End With
Dim rCell As Range
Dim cRng As Range
For Each rCell In rng.Cells
Set cRng = rCell
Debug.Print rCell.Address
isConditionallyFormatted (rCell)
Next rCell
End Sub
好的,正如我在评论中所述,建议将所有宏都放在一起。 抱歉,如果本文不失为上纲,但以您的“巨大菜鸟”为准,我认为最好是假设您一无所知。 请执行下列操作
注意! 每当我在括号中放一些东西并说“写”时,不要包括括号。
在某个地方(例如,现在您拥有列表框的地方),输入您拥有或可能拥有的所有任务类型。 选择所有这些,并命名为“ taskTypes”
然后,找到一个要放置“按钮”的单元格。 给它一个漂亮的颜色,然后转到“数据”选项卡,选择“数据验证”,然后在“允许”下拉列表中选择“列表”。 然后,将出现一个标记为“源”的新文本框。 在此处输入“ = taskTypes”。
将此单元命名为“ taskSelectorCell”。 该单元格将成为一个下拉列表(需要将鼠标悬停在该列表上,以便显示下拉箭头,因此可以通过漂亮的颜色查看其位置)
然后在“日常任务”表中选择左上方的单元格,并创建一个新的条件格式设置规则(“主页”选项卡)。 选择“使用公式来确定要格式化的单元格”。 现在,我在“日常任务”中左上角的单元格是E2,因此我的条件格式公式变为:
=$E2=taskSelectorCell
然后选择一种格式格式。 和您一样,我选择了红色背景。 现在,每当taskSelectorCell更改时,这将使该单元(E2)变为红色。
要完成最后一部分,请选择E2,按条件格式,然后单击“管理规则”。 您创建的规则将在那里。 在标有“适用于”的Boc中,选择“每日任务”表和“每周任务”表(全部选择),然后应用。 现在,无论何时在taskSelectorCell下拉列表中选择某项,这两个表中的所有任务将被标记为红色,类型,频率和描述。
由于您的组是并排的,因此我们不能对所有表使用一个公式(除非我们使用offset函数,但是如果您是一个巨大的excel noob,就不要这样做。因此,您需要重复两次该过程。一次执行每月任务,一次执行“按需”任务。
我建议这样的事情:
这是代码:
For Each rCell In rng.Cells
With rCell
If .Interior.Color <> RGB(255, 0, 0) Or .Font.Italic <> False Then
Else
Range(rCell.Offset(, -1), rCell.Offset(, 1)).Interior.Color = RGB(255, 0, 0)
Range(rCell.Offset(, -1), rCell.Offset(, 1)).Font.Bold = True
Range(rCell.Offset(, -1), rCell.Offset(, 1)).Font.Italic = True
End If
End With
Next rCell
rng.Font.Italic = False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.