我有来自F19:G500
的列F和列G范围。假设F19
中的值不等于G19
中的值,G19
值是> 0.然后我想得到一个msgbox“不匹配的数字”。
我写了一个VBA代码,如下所示,其中包含行F19
,F20
,F21
,但是为每行最多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
答案 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