如何使用exel vba在两列中找到不相等的值

时间:2017-03-14 10:20:56

标签: excel vba excel-vba

我有来自F19:G500的列F和列G范围。假设F19中的值不等于G19中的值,G19值是> 0.然后我想得到一个msgbox“不匹配的数字”。

我写了一个VBA代码,如下所示,其中包含行F19F20F21,但是为每行最多500行编写代码,非常艰巨的任务。

那么如何最小化所有行的代码呢?

Sub UM()

Sheets("cbpb-de").Select
If Range("f19").Value <> Range("g19") And Range("g19").Value > 0 Then
    MsgBox "Unmatching  Number  " & Range("f19").Value & "  and  " & Range("g19").Value
Else
    If Range("f20").Value <> Range("g20") And Range("g20").Value > 0 Then
        MsgBox "Unmatching  Number  " & Range("f20").Value & "  and  " & Range("g20").Value
    Else
        If Range("f21").Value <> Range("g21") And Range("g21").Value > 0 Then
            MsgBox "Unmatching  Number  " & Range("f21").Value & "  and  " & Range("g21").Value
        End If
    End If
End If

End Sub

2 个答案:

答案 0 :(得分:0)

您必须使用循环遍历第19到第500行。使用Cells方法,您将指定要比较的单元格:Cells(rowIndex, colIndex) - rowIndex将是迭代器,它将遍历行,colIndex将为6,如果如果列为F,则列为7(第六列),G。如果不满足条件,您将打印一条消息,说明问题出现在哪一行。

Sub Matches()

For i = 19 To 500
    If Cells(i, 6).Value <> Cells(i, 7).Value And Cells(i, 7).Value > 0 Then
        MsgBox "Unmatched numbers at line: " & i
    End If
Next i

End Sub

答案 1 :(得分:0)

以下代码将满足您的需求。您需要循环遍历范围并测试值,而不是硬编码测试(大约需要500行)。有关循环的更多信息,请访问https://msdn.microsoft.com/en-us/library/office/gg264596.aspx

我故意将F和G列中的值分配给变量,以帮助您了解循环的工作方式,并在更改时更轻松地跟踪值。

Sub Test()
Dim c As Range
Dim varG As Variant
Dim varF As Variant

    'Loop All Cells In Your Range
    For Each c In Range("F19:F500")
        'Get The Value Of The Current Cell In Column F
        varF = c
        'Get The Value Of The Current Cell In Column G
        varG = c.Offset(0, 1)
        'Is There A Value In Column G?
        If varG > 0 Then
            'Yes, There Is A Value. Does F = G?
            If varF <> varG Then
                MsgBox "Unmatching number " & varF & " and " & varG & " address " & c.Address
            End If
        End If
    Next c

End Sub