【问题标题】:How to highlight a row if three conditions are met?如果满足三个条件,如何突出显示一行?
【发布时间】:2011-06-18 02:46:57
【问题描述】:

如果满足以下条件:

对于第 10 行和第 100 行(含)之间的任何给定行:

  • A 列的单元格不为空
  • B 列的单元格不为空
  • O 列的单元格为空

我想突出显示一个特定的单元格(比如 A1)。

例子:

我填充 A10 和 E10,同时将 O10 留空,然后单元格 A1 被突出显示。如果我随后填充单元格 O10,则单元格 A1 中的突出显示将消失。

我可以继续下一行。任何时候任何行都应该产生这些动作。

谢谢!

【问题讨论】:

  • 您是自己尝试的,还是您只是交给社区来解决的任务?
  • 我尝试了条件格式。意识到这行不通。需要 VBA 代码。

标签: excel vba highlight conditional-statements


【解决方案1】:

这将根据您指定的条件进行高亮显示。当您运行它时,它将停在您需要在 O 列中输入内容的第一行。如果您希望它一直运行到第 101 行并突出显示所有行,然后删除然后 Exit Do 命令,该命令位于 2 End If声明。

Sub Highlight()

    Dim TheRow As Integer

    TheRow = 9

    Application.ScreenUpdating = False 'This hides the visual process and speeds up
                                        'the execution

    Do

        TheRow = TheRow + 1

        If TheRow = 101 Then Exit Do

        Cells(TheRow, 1).Select
        Selection.Interior.Pattern = 0

        Cells(TheRow, 2).Select
        Selection.Interior.Pattern = 0

        If Not Cells(TheRow, 1).Value = "" And Not Cells(TheRow, 2).Value = "" And Cells(TheRow, 15).Value = "" Then

            If Cells(TheRow, 1).Value = "" Then
                Cells(TheRow, 1).Select
                Selection.Interior.Color = 656
            End If

             If Cells(TheRow, 2).Value = "" Then
                Cells(TheRow, 2).Select
                Selection.Interior.Color = 656
            End If

            Exit Do  'this is the line to remove if you want to highlight all cells

        End If

    Loop

    Application.ScreenUpdating = True

End Sub

然后,创建一个在第 15 列中的单元格更改时触发的事件处理程序。将以下代码放入实际工作表的模块中(在 VBA 项目资源管理器中,双击您想要具有此功能的工作表;不要将其放在其他模块中!)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 15 Then
        If Target.Row > 9 And Target.Row < 101 Then Call Highlight
End Sub

让我知道这个解决方案是否有效,记得点击“接受解决方案”并投票!

编码愉快。

【讨论】:

  • 似乎有效,但前提是我运行宏。我需要它来持续“嗅探”空白单元格,并在填充第 15 列时自动取消突出显示。
  • 刚刚编辑了解决方案:事件处理程序将满足您的需求。
  • 好的,这个还是有问题的。我需要更清楚。对于每个给定的行(11 到 110),我需要填充列 A、B、C 以及从 E 到 N 的以下任何一个。填充这四个单元格后,要突出显示的单元格位于第 10 行(始终)但匹配列(从 E 到 N)。最后,当为给定行填充 O 列时,第 10 行中突出显示的单元格恢复正常。例如,我填充:A22、B22、C22 和 J22。在这种情况下,J10 突出显示...因为我选择了 J 列。之后,J10 在填充 O22 时恢复正常。这同样适用于所有 11-110 行。
  • 这是什么意思:一旦这四个单元格被填充,要突出显示的单元格在第 10 行(总是)但与列匹配(从 E 到 N)????如果我们在第 56 行会发生什么?突出显示的是什么?
  • 如果我们在第 56 行并且得到 A56、B56、C56 ... 以及 E56 到 N56 之间的任何其他,则相应的 E10 到 N10 将突出显示,直到填充 O56。
【解决方案2】:

您不需要 VBA:只需使用以下公式在单元格 A10 上使用条件格式:

=AND(NOT(ISBLANK($A10)),NOT(ISBLANK($B10)),ISBLANK($O10))

【讨论】:

  • 不。 A1 是要突出显示的单元格,如果在 100 行中的任何一行上满足三个条件(A10:O110)
【解决方案3】:

好的 - 我误解了你想要的。这是一个用于检查的 VBA UDF。 在单元格 A1 中输入=Checker($A$10:$B$100,$O$10:$O$100),然后在单元格 A1 上使用条件格式,当它变为 True 时触发。

Public Function Checker(theRangeAB As Range, theRangeO As Variant) As Boolean
    Dim varAB As Variant
    Dim varO As Variant
    Dim j As Long

    varAB = theRangeAB.Value2
    varO = theRangeO.Value2

    Checker = False
    For j = 1 To UBound(varAB)
        If Not IsEmpty(varAB(j, 1)) And Not IsEmpty(varAB(j, 2)) Then
            If IsEmpty(varO(j, 1)) Then
                Checker = True
                Exit For
            End If
        End If
    Next j

End Function

【讨论】:

  • 我会写成:If Not IsEmpty(varAB(j, 1)) Then: If Not IsEmpty(varAB(j, 2)) Then: If IsEmpty(varO(j, 1)) Then,因为如果 A 列为空,则检查 B 列是没有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多