比较单元格数据和复制

我发现了这个伟大的代码片段,我试图操纵它为我工作,但我似乎无法得到它。 不幸的是,我一直没有能够理解它,这并没有帮助。 所以我转向你。 我需要评估一列单元格,并寻找相似或不同之处。 如果工作表1列1中的单元格与工作表2列1中的任何单元格不同,我想将整行复制到使用区域底部的工作表1中。 我已经得到了这一点,你看到的将复制正确的第一个单元格,但我不能操纵它复制整个行。 我认为,由于“With”是如何构build的,但是我需要尽量远离循环,因为有超过30k个单元需要评估。

沿着这条路走,我也想用上面的方法寻找重复的东西,如果有重复的东西,比较相邻的细胞的差异,如果有差异,把现有的数据移动到一个注释中,移动新的数据进入现有的单元格。

任何和所有的build议,一如既往,非常赞赏。

Sub Compare_Function() Call Get_Master_Cell_Info Application.ScreenUpdating = False With Sheets("Update").Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(, 1) .Formula = "=VLOOKUP(A4,'New Master Data 6.1'!A:A,1,FALSE)" .Value = .Value .SpecialCells(xlCellTypeConstants, 16).Offset(, -1).Copy Sheets("New Master Data 6.1").Range("A" & Rows.Count).End(xlUp).Offset(1) .ClearContents End With Application.ScreenUpdating = True End Sub 

快速逐行细分

这只需要从单元格A4到列A中最后使用的单元格的整个使用范围然后将其偏移一列,所以B4:Bx(x是列A中最后使用的行)

 With Sheets("Update").Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(, 1) 

这将公式放在所有单元格中,以便在主工作表中查找A4,A5,A6等,如果未find,则返回主工作表中的值或错误。 然后它将这些值复制到硬编码中

 .Formula = "=VLOOKUP(A4,'New Master Data 6.1'!A:A,1,FALSE)" .Value = .Value 

Specialcells查找常量(所有单元格),值为16,这意味着错误单元格(即单元格不存在)偏移-1(所以列A),并复制到新的工作表A列rows.count + 1

 .SpecialCells(xlCellTypeConstants, 16).Offset(, -1).Copy Sheets("New Master Data 6.1").Range("A" & Rows.Count).End(xlUp).Offset(1) 

你可能也想在你之后做这件事。清理内容,这样你不会得到列B中的所有错误单元格

修复它只是将复制的范围更改为.entirerow

 .SpecialCells(xlCellTypeConstants, 16).entirerow.Copy Sheets("New Master Data 6.1").Range("A" & Rows.Count).End(xlUp).Offset(1) 

你也会复制B列中的错误,但是这个结构没有得到解决。 之后可以随时从主表中删除它们。

还要注意,这段代码将覆盖您在B列中存储的任何数据。

还有一点需要注意的是,这段代码依赖于表单更新是否处于活动状态,否则将不会运行,因为您的单元格在您的范围内运行需要工作表明确说明,您的rows.count也是如此。 你会更好地包装整个事情在两个withs,一个表和一个范围(使用.cells和.rows.counmt)