【问题标题】:Apply Conditional Formatting to Adjacent Cells?将条件格式应用于相邻单元格?
【发布时间】:2015-06-17 02:57:19
【问题描述】:

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

它是按频率组织(并分成组)的每日/每月/年度任务......所以我有一个单独的盒子用于每日、每周等。

每个组有 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

【问题讨论】:

  • 您是否尝试过使用数据验证下拉菜单进行常规条件格式(非 vba),或者不会达到您想要的结果。据我所知,它会(如果是,我可以发布解决方案)
  • 对不起,我没有尝试探索数据验证。我是一个巨大的 excel 菜鸟
  • 如果您验证我对您的问题的理解,我将给出一个解决方案:您有“主要”列,每日、每月和每年的任务。每个有 3 列宽,带有标题类型、频率和描述。 You want to have ONE dropdown (or one per major column/group??) with all task types (are these predefined in some list somewhere?) and when selected, it shall highlight the type, frequency and description of all tasks with that type .正确的?而且,A:C、D:F 和 G:I 中的这些组是否在同一张纸上?
  • 我的朋友i.imgur.com/ihmkYbC.png看起来像这样

标签: vba excel conditional-formatting


【解决方案1】:

好的,正如我在 cmets 中所说,建议将宏放在一起。很抱歉,如果这篇文章让人觉得居高临下,但考虑到你所说的“巨大的菜鸟”,我认为最好假设你什么都不知道。执行以下操作

注意!每当我把东西放在括号里并说“写这个”时,不要包括括号。

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

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

将此单元格命名为“taskSelectorCell”。这个单元格将成为一个下拉列表(需要将鼠标悬停在它上面才能出现下拉箭头,因此颜色很好看它在哪里)

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

=$E2=taskSelectorCell

然后选择格式格式。我和你一样选择了红色背景。现在,这将允许该单元格 (E2) 在 taskSelectorCell 更改时变为红色。

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

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

【讨论】:

  • 它使用数据验证来处理。就像使用命名范围而不是引用或直接在数据 val 字段中写入一样。
【解决方案2】:

我会建议这样的事情:

  1. 在代码中应用条件格式
  2. 然后在范围内循环以检测 Highlighted 并突出显示 2 其他水平相邻的单元格并以斜体传递它们以避免 将它们视为通过条件格式突出显示
  3. 以非斜体重新传递整个范围

代码如下:

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

【讨论】:

  • 嘿,这看起来不错,但有一个问题,那个问题是单元格已经被轻微着色了——其中一些有不同的背景颜色,即使这样,这似乎也不是在拾取单元格以编程方式突出显示的不同 - 它显示了它们的原始颜色代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2015-02-27
  • 2020-04-13
  • 1970-01-01
  • 2017-08-13
  • 2018-06-04
相关资源
最近更新 更多