Vba 在excel工作表中查找计数器零件记录

Vba 在excel工作表中查找计数器零件记录,vba,excel,duplicates,Vba,Excel,Duplicates,我只是想创建一个普通宏,它将执行以下操作: 它只是检查不同的数据集是否有对应的记录。 首先,它检查是否找到相同的金额,如果是,则检查日期和文本。如果所有内容都相同,则应突出显示该记录。 我是新来的,所以我在第一步只是检查了正确的数量并突出显示单元格,但即使这样也不起作用:。我刚刚尝试了双循环,下面是代码: Dim row1 As Integer Dim row2 As Integer Dim index1 As Integer Dim index2 As Integer index1 = 0

我只是想创建一个普通宏,它将执行以下操作:

它只是检查不同的数据集是否有对应的记录。 首先,它检查是否找到相同的金额,如果是,则检查日期和文本。如果所有内容都相同,则应突出显示该记录。 我是新来的,所以我在第一步只是检查了正确的数量并突出显示单元格,但即使这样也不起作用:。我刚刚尝试了双循环,下面是代码:

Dim row1 As Integer
Dim row2 As Integer
Dim index1 As Integer
Dim index2 As Integer

index1 = 0
index2 = 0
row1 = 2
row2 = 10

Do
 Do
    If Cells(row1, 1).Value = Cells(row2, 13).Value Then
    Cells(row1, 1).Interior.ColorIndex = 3
        Exit Do
    End If
    row2 = row2 + 1
   index2 = index2 + 1
  Loop Until index2 = 12

    index1 = index1 + 1
    row1 = row1 + 1
Loop Until index1 = 5
稍后我还想包括一个计算行数的函数,这样,如果行数发生变化,这个宏也可以工作

Excel宏扩展:


因此,为了针对多个条件进行测试,您需要使用And并每次更改Cells语句中的列位置

另外,在第二个Do循环之后,您需要将index2重置为0,否则它将超过12,并且在index2=12之前永远不会满足您的循环退出标准,从而导致溢出

要突出显示整行而不仅仅是列A,您需要使用RangeCellsx,y,Cellsx,y来指示该范围

最后,您需要将第一个循环的退出条件设置为Loop直到index1=4,因为您将index1初始化为0,所以5次迭代等于0到4次,而不是0到5次

另外,我没有涉及变量,但请注意,在声明循环中使用的变量时,最好的做法是将它们声明为long,而不是整数。整数最多约32000行,其中long可以超过一百万行

Sub Test()
Dim row1 As Integer
Dim row2 As Integer
Dim index1 As Integer
Dim index2 As Integer

index1 = 0
index2 = 0
row1 = 2
row2 = 10

Do
    Do
        If Cells(row1, 1).Value = Cells(row2, 1).Value And _
           Cells(row1, 3).Value = Cells(row2, 3).Value Then
            If Cells(row1, 2).Value <> Cells(row2, 2).Value Then
                Range(Cells(row1, 1), Cells(row1, 3)).Interior.ColorIndex = 3
                Range(Cells(row1, 2), Cells(row1, 2)).Interior.ColorIndex = 6
                Range(Cells(row2, 1), Cells(row2, 3)).Interior.ColorIndex = 3
                Range(Cells(row2, 2), Cells(row2, 2)).Interior.ColorIndex = 6
            Else
                Range(Cells(row1, 1), Cells(row1, 3)).Interior.ColorIndex = 3
                Range(Cells(row2, 1), Cells(row2, 3)).Interior.ColorIndex = 3
                Exit Do
            End If
        End If

        row2 = row2 + 1
        index2 = index2 + 1

    Loop Until index2 = 12

    row1 = row1 + 1
    index1 = index1 + 1
    index2 = 0
    row2 = 10

Loop Until index1 = 4

End Sub

第13列是M列,你是想把它作为Cellrow2,13。值吗?哇,谢谢你这个伟大的答案!是否也可以一步一步地检查日期和文本?因此,首先检查金额,如果金额与宏匹配,则检查日期,如果日期不匹配,则检查文本,如果文本相同,则检查文本,如果日期与文本不匹配,则检查日期,然后检查文本,如果日期与文本不匹配,则检查文本颜色也将为红色,如果日期与文本不匹配,则颜色也将为非金额?如果这对你来说只是一件很快的事情,如果你能帮助我就太好了,否则我会自己尝试,但我认为我不能以一种有效的方式去做@如果日期和文本都匹配怎么办?在这种情况下,金额日期文本将为红色。所有匹配的内容都将是红色,所有不匹配的内容都将是黄色,但如果数量不匹配,则任何内容都不会着色。@Dupor我需要您提供一张您预期结果的更新图片。您在上面发布的图片没有反映您正在编写的标准-我希望第二个13金额行为黄色,因为上面有一个匹配的金额行,但没有匹配的日期。@请注意,我在代码行2=10中添加了另一行。您的某些行缺少一些迭代。这会抓住一切。