在Excel中循环行,然后循环列
我在excel中有一系列统一的数据,a列有说明,B列有唯一ID,C列为空。接下来的3列具有相同的数据集。我试图让我的vba循环遍历两组数据并比较唯一ID,如果存在差异,它会将其复制到新工作表的数据范围 问题是,它不仅仅是6列数据,而是大约几百列数据,因此在检查第一个数据范围后,一旦到达最后一行,循环需要移动6列以再次开始该过程 一旦到达最终路径,我就很难让循环穿过6列在Excel中循环行,然后循环列,excel,vba,loops,Excel,Vba,Loops,我在excel中有一系列统一的数据,a列有说明,B列有唯一ID,C列为空。接下来的3列具有相同的数据集。我试图让我的vba循环遍历两组数据并比较唯一ID,如果存在差异,它会将其复制到新工作表的数据范围 问题是,它不仅仅是6列数据,而是大约几百列数据,因此在检查第一个数据范围后,一旦到达最后一行,循环需要移动6列以再次开始该过程 一旦到达最终路径,我就很难让循环穿过6列 Sub finddata() Dim s As Worksheet Dim uniqueId As String Dim fi
Sub finddata()
Dim s As Worksheet
Dim uniqueId As String
Dim finalrow As Long
Dim i As Long
Dim c As Long
Dim rngSearch As Range
Dim rngFound As Range
Dim finalcolumn As Long
Dim offset As Integer
Application.ScreenUpdating = True
uniqueId = Sheets("Data").Range("B2").Value
finalrow = Sheets("Data").Range("G100000").End(xlUp).Row
finalcolumn = Sheets("Data").Range("XFD1").End(xlToLeft).Column
offset = 3
Set s = Sheets("Data")
Set rngSearch = s.Range(s.Cells(2, 5), s.Cells(finalrow, 5))
Sheets("DataValidation").Range("A1:C100000").ClearContents
If i = finalrow GoTo 'guessing this is how to being to loop to move over columns
For i = 2 To finalrow
uniqueId = s.Cells(i, 2).Value
Set rngFound = rngSearch.Find(What:=uniqueId, LookIn:=xlValues, LookAt:=xlWhole)
If rngFound Is Nothing Then
s.Range(Cells(i, 1), Cells(i, 6)).Copy
Sheets("DataValidation").Range("A1048575").End(xlUp).offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
End If
Next i
MsgBox "Done"
End Sub
下面是一个简短的示例,演示如何在3列的统一范围内迭代,并向右移动偏移量6。你说你的范围是一致的,所以我硬编码了rngSet的初始值 在For Each中,我正在打印单元格的地址,但您可以在那里进行检查。While循环将在到达空单元格时结束
Dim rngSet As Range, rngRow As Range
Set rngSet = Range("A1:B6")
While Not IsEmpty(rngSet.Cells(1, 1).Value)
For Each rngRow In rngSet.Rows
Debug.Print rngRow.Cells(1, 1).Address
Next rngRow
Set rngSet = rngSet.Offset(0, 6)
Wend
试试那个
For j = 1 to finalcolumn step 6
Set rngSearch = s.Range(s.Cells(2, j - 1 + 5), s.Cells(finalrow, j - 1 + 5))
For i = 2 To finalrow
uniqueId = s.Cells(i, 2 + j - 1).Value
Set rngFound = rngSearch.Find(What:=uniqueId, LookIn:=xlValues, LookAt:=xlWhole)
If rngFound Is Nothing Then
s.Range(Cells(i, 1 + j - 1), Cells(i, 6 + j - 1)).Copy
Sheets("DataValidation").Range("A1048575").End(xlUp). _
offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
End If
Next i
Next j
如果i=finalrow GoTo
你错过了它需要去的地方,希望它对你有所帮助。另外,你能再解释一下你的意图吗?从datavalidation中清除A到C列,然后查找数据中的某些内容,如果没有找到,则将其粘贴到datavalidation?嘿,Damian,我将其放在那里,因为我认为这是第一步。所以一旦i=final行(它在所有行中循环,然后转到下一列)。该脚本遍历并在某个范围内找到任何不匹配的唯一ID,因此它在三列中查找,并与接下来的三列进行比较,copy's any将任何错误数据粘贴到新工作表中。它只是从清除工作表开始通常您使用嵌套循环来完成此操作。。。这很容易,但我很难理解你的目标。。。如果你能编辑你的问题,再解释一下你想做什么,我们可以帮你。好的@Damian,我试着澄清这个问题。希望能有点帮助谢谢,一旦你检查了第一个to集合(A列、B列、C列和D列、E列、F列),下一个迭代应该如何进行?A、 B,C vs G,H,I?我尝试了一下,在第一个列块中效果很好,然后移动到下一个列,但是在循环通过前6个列之后,它一直认为rngFound什么都不是?必须检查rngSearch变量,以便在第二个loopDone中与loopset rngSearch with一起执行。我以前没有检查过。