列中的VBA搜索值和突出显示范围内的匹配

时间:2017-10-10 11:13:44

标签: excel excel-vba vba

在某个列中存在该值时,我找不到突出显示某个范围内值的方法。

O具有可填充值的公式。这些值中的每一个都有自己的列,从R开始。 O10可以说“OD”。列SS8中有一个标题为“OD”的列标题。它下面的大多数单元格都是空白的,但如果不是,它们会说“OD”,所以由于在O列中找到“OD”,我希望列S中的所有值都不为空是.style =“中立”。

O的相关范围需要O8到最后一行。搜索这些值的列将为R8:Last Column

我有一个不错的开始。我可以让它以我想要的方式高亮显示任何非空白值,但在更改样式之前,我无法确保该值在列O中。

这是迄今为止的代码:

Sub HighlightCompGrid()

Dim FirstRow As Long, LastRow As Long, i As Long, x As Long, c As Range
Dim Selected As Range
Dim Grid As Range

FirstRow = Range("B:B").Find("ID", Range("B1")).Row
LastRow = Range("B:B").Find("End", Range("B8")).Row
i = Range("B" & FirstRow & ":B" & LastRow).Count

Set Grid = Range("R9", Range("R9").Offset(i - 1, i - 1))
Set Selected = Range("O9", Range("O9").Offset(i - 1, 0))

Selected.Select

For Each c In Grid
    If c.Value = Selected.Value Then
        Cells(c.Row, c.Column).Style = "Neutral"
    Else 'Do Nothing
    End If
Next c
End Sub

2 个答案:

答案 0 :(得分:0)

你不需要一个宏。您可以使用名为条件格式的Excel功能。

条件格式

只需在工作表中选择所需的列,在功能区中转到Home -> Conditional Formatting -> Highlight Cells Rules -> Equal To...

因为你不能在公式中什么都没有,只需输入任何东西。然后点击Home -> Conditional Formatting -> Manage Rules

更改新创建的规则

在那里,更改它以使规则为=""

如果你真的需要一个宏,那么我会怎么做:

Sub styleEmptyCells()

    Const FIRST_ROW        as Long = 2
    Const COLUMN_TO_CHECK  as String = "O"

    Dim i                  as Long 
    Dim lastrow            as Long

    lastrow = Range("A65535").End(xlUp).row

    For i = FIRST_ROW to lastrow
        If Range(COLUMN_TO_CHECK & i) = "" Then
           Range(COLUMN_TO_CHECK & i).Style = "Neutral" 
        End If
    Next

End Sub

答案 1 :(得分:0)

我在网上发现了一些我能够根据自己的需要进行修改的代码。与我试图通过的疯狂箍相比,它是如此简单。

以下是代码看起来像

的内容
Sub HighlightCompGrid()
Application.ScreenUpdating = False

TransposeNames
FillDownFormats
'these two macros will "reset" the grid

Dim FirstRow As Long, lastRow As Long, i As Long, c As Range
Dim Selected As Range
Dim Grid As Range

FirstRow = Range("B:B").Find("ID", Range("B1")).Row
lastRow = Range("B:B").Find("End", Range("B8")).Row
i = Range("B" & FirstRow & ":B" & lastRow).Count

Set Grid = Range("R9", Range("R9").Offset(i - 1, i - 1))
Set Selected = Range("O9", Range("O9").Offset(i - 1, 0))

For Each c In Grid
    If IsNumeric(Application.Match(c, Selected, 0)) Then
        c.Style = "Neutral"
        c.Borders.LineStyle = xlContinuous
    End If
Next c

Application.ScreenUpdating = False

End Sub

它循环遍历Column O中的每个值并检查我的列范围内的匹配(网格)以及何时执行...输入命令。