Excel VBA查找/突出显示,但检查相邻单元格

时间:2016-04-04 12:01:00

标签: excel vba excel-vba

BOTTOM的修订

我有以下代码用于搜索大型Excel文档以获取数字列表,如果找到,则突出显示该单元格。这些数字存储在一个单独的Excel文档中,因此" For i =#to ##"和#34;使用Workbookx(" $$$$")。表格(" %%%%")",其中符号将被替换为依赖关于他们使用此宏的哪些文件:

Sub PNsToRemove()

    Dim i       As Integer
    Dim findStr As String
    Dim ws      As Worksheet
    Dim lColor    As Long

    lColor = RGB(211, 211, 211)

    'Set i = # to ### to the first and last row numbers of the P/N list
    For i = # To ###

        'set $$$$$ to name of the excel sheet containing the pn's
        'set %%%%% to the sheet name that the pn's are on
            With Workbooks("$$$$$").Sheets("%%%%%")

                'set @ to the column that contains the pn's
                findStr = .Range("@" & i).Value

            End With

            For Each cell In Intersect(Sheets("&&&&").Range("A:Z"), Sheets("&&&&").UsedRange)

            If InStr(cell.Value, findStr) > 0 Then
                cell.Interior.Color = lColor

            End If

            Next
    Next

End Sub

我有一种情况出现在前一天突出显示单元格之前,我需要检查与其相邻的单元格的值。它将位于同一行,但左侧为1到3列。有一个字符串列表,如果存在于相邻单元格中,则应使宏不突出显示包含该数字的单元格。我怀疑If InStr(cell.value, findStr) > 0 Then条件中存在一些代码,但我不确定如何继续。

谢谢! 杰米

REVISION

我能够使用它来为prefix1中的值工作,但是2到4不会工作(感谢你对cell.offset()Siddharth的评论!)。我错过了InStr功能吗?我读过的所有内容都表明它应该适用于数字搜索:

            prefix1 = "DG"
            prefix2 = "70"
            prefix3 = "72"
            prefix4 = "73"

            For Each cell In Intersect(Sheets("CAT. NO.").Range("I:BO"), Sheets("CAT. NO.").UsedRange)

            If InStr(cell.Value, findStr) > 0 Then


                If InStr(cell.Offset(-1).Value, prefix1) = 0 Then
                If InStr(cell.Offset(-1).Value, prefix2) = 0 Then
                                'debug1 = InStr(cell.Offset(-1).Value, prefix1)
                                'Range("U6604").Value = debug1
                If InStr(cell.Offset(-1).Value, "72") = 0 Then
                If InStr(cell.Offset(-1).Value, "73") = 0 Then
                     cell.Interior.Color = lColor
                     cell.Offset(ColumnOffset:=-1).Interior.Color = lColor
                     cell.Offset(ColumnOffset:=1).Interior.Color = lColor
                     cell.Offset(ColumnOffset:=2).Interior.Color = lColor


                End If
                End If
                End If
                End If

            End If

我确实在If / And行中有所有If语句,但更容易使用分解。

谢谢!

1 个答案:

答案 0 :(得分:0)

UNTESTED

不确定# to ##是如何运作的 - 毫无疑问,这是动态添加这些数字的更好方法,但这不属于这个问题的范围,所以我'我会忽略。

尝试在特定情况下包装if语句:

Sub PNsToRemove()

    Dim i       As Integer
Dim findStr As String
Dim ws      As Worksheet
Dim lColor    As Long
Dim chkStr1 As String, chkStr2 As String, chkStr3 As String

chkStr1 = "Check for this"
chkStr2 = "Or For This"
chkStr3 = "Or Even for This"

lColor = RGB(211, 211, 211)

'Set i = # to ### to the first and last row numbers of the P/N list
For i = # To ###

    'set $$$$$ to name of the excel sheet containing the pn's
    'set %%%%% to the sheet name that the pn's are on
        With Workbooks("$$$$$").Sheets("%%%%%")

            'set @ to the column that contains the pn's
            findStr = .Range("@" & i).Value

        End With

        For Each cell In Intersect(Sheets("sheet1").Range("A:Z"), Sheets("sheet1").UsedRange)
            Select Case (cell)
                Case cell.Offset(0, 1) = chkStr1, chkStr2, chkStr3
                    GoTo MoveOn
                Case cell.Offset(0, 2) = chkStr1, chkStr2, chkStr3
                    GoTo MoveOn
                Case cell.Offset(0, 3) = chkStr1, chkStr2, chkStr3
                    GoTo MoveOn
                Case Else
                    If InStr(cell.Value, findStr) > 0 Then
                        cell.Interior.Color = lColor
                    End If
            End Select
MoveOn:
            Next
        Next

End Sub

我们声明并为您在顶部检查的字符串分配字符串变量。

我们检查左边的一个单元格与任何检查字符串匹配的情况 - 如果是这样的话我们退出选择案例并继续前进到下一个单元格而没有任何操作,否则我们将移动到下一个案例。 / p>

我们检查左边的两个单元格是否匹配任何检查字符串的情况 - 如果是这样的话我们退出选择案例并继续前进到下一个单元格而没有任何操作,否则我们将移动到下一个案例。 / p>

我们检查左边的三个单元格与任何一个检查字符串匹配的情况 - 如果是这样的话我们退出选择案例并继续前进到下一个没有操作的单元格,否则我们移动到其他情况。 / p>

只有当我们检查的单元格左边的1和3之间没有任何单元格与要检查的任何字符串匹配时,我们才运行if语句并应用格式(如果它的计算结果为真。