Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel中循环行,然后循环列_Excel_Vba_Loops - Fatal编程技术网

在Excel中循环行,然后循环列

在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

我在excel中有一系列统一的数据,a列有说明,B列有唯一ID,C列为空。接下来的3列具有相同的数据集。我试图让我的vba循环遍历两组数据并比较唯一ID,如果存在差异,它会将其复制到新工作表的数据范围

问题是,它不仅仅是6列数据,而是大约几百列数据,因此在检查第一个数据范围后,一旦到达最后一行,循环需要移动6列以再次开始该过程

一旦到达最终路径,我就很难让循环穿过6列

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一起执行。我以前没有检查过。