将条件格式应用于相邻单元格?

时间:2015-06-17 02:57:19

标签: excel vba excel-vba conditional-formatting

我想要搜索并突出显示一些文本数据。

每日/每月/每年的任务按频率组织(并按组分开)......所以我每天,每周等都有一个单独的框。

每组有3列......“类型”,“频率”和“描述”。

我有一个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

2 个答案:

答案 0 :(得分:1)

好的,正如我在评论中所说,建议是将宏放在一起。对不起,如果这篇文章感觉居高临下,但是接受你的“巨大菜鸟”的陈述,我认为最好假设你什么都不知道。请执行以下操作

请注意!每当我把一些东西放在括号中并说“写这个”时,不要包括那些支持者。

某些地方,例如您现在拥有列表框的地方,请输入您拥有或可能拥有的所有任务类型。选择所有这些,并将该范围命名为“taskTypes”

然后,找到您想要“按钮”的单元格。给它一个漂亮的颜色,然后转到数据选项卡,选择数据验证,并在“允许”下拉菜单中选择“列表”。然后,将出现一个标有“Source”的新文本框。在那里输入“= taskTypes”。

将此单元格命名为“taskSelectorCell”。这个单元格将成为一个下拉列表(需要将鼠标悬停在它上面以显示下拉箭头,因此可以看到漂亮的颜色)

然后在“每日任务”表中选择左上角的单元格,并创建新的条件格式设置规则(“主页”选项卡)。选择“使用公式确定要格式化的单元格”。现在,我在“每日任务”中的左上角单元格是E2,所以我的条件格式化公式变为:

=$E2=taskSelectorCell

然后选择格式格式。我选择了红色背景,就像你一样。现在,只要taskSelectorCell发生变化,这将允许该单元格(E2)变为红色。

要完成最后一部分,请选择E2,按条件格式和“管理规则”。你创建的规则就在那里。在标有“适用于”的boc中,选择每日任务表和每周任务表(全部在一个选项中),然后应用。现在,每当您在taskSelectorCell下拉列表中选择某些内容时,这两个表中的所有内容都将标记为红色,类型,频率和描述。

由于你的小组并排,我们不能对所有的表使用一个公式(除非我们使用偏移函数,但如果你是一个巨大的excel noob,那就不要这样做。因此,你需要重复处理两次。一次用于每月任务,一次用于“按需”任务。

答案 1 :(得分:0)

我会建议这样的事情:

  1. 在代码中应用条件格式
  2. 然后在范围内循环以检测突出显示并突出显示2 其他水平相邻的细胞并以斜体传递它们以避免 将它们视为条件格式化
  3. 突出显示
  4. 以非斜体显示整个范围
  5. 以下是代码:

    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