比较单元数据和复制

时间:2016-06-08 23:21:41

标签: excel vba excel-vba

我发现了这段很棒的代码,我试图操纵它来为我工作,但我似乎无法得到它。不幸的是,我无法理解它,完全理解它,这没有用。所以我转向你。我需要评估一列细胞并寻找相似之处或不同之处。如果第1页第1列中的单元格与第2页第1列中的任何单元格不同,我想将整行复制到使用区域底部的第1页。我已经知道你所看到的将复制正确的第一个单元格,但我不能操纵它来复制整行。我认为,由于'With'的结构如何,但我需要尽量避免做循环,因为有超过30k的细胞需要评估。

走在路上我也想要使用上面相同的方法查找重复项,如果有重复项,请比较相邻单元格的差异,如果存在差异,请将现有数据移动到注释中将新数据移动到现有单元格中。

一如既往,非常感谢任何建议。

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

1 个答案:

答案 0 :(得分:1)

快速逐行细分

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

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

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

中进行硬编码
.Formula = "=VLOOKUP(A4,'New Master Data 6.1'!A:A,1,FALSE)"
.Value = .Value

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

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

您可能还想在.clearcontents之后执行此操作,这样就不会获得B列中的所有错误单元格

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

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

您还将复制B列中的错误,但使用此结构时无法解决问题。始终可以在主表单中删除它们。

另请注意,此代码将覆盖您在B列中存储的所有数据。

另外请注意,此代码取决于工作表更新是否处于活动状态,否则将无法运行,因为您的单元格在您的范围内运行需要明确说明工作表,row.count也是如此。你最好将整个东西包装在2个withs中,一个用于工作表,一个用于范围(使用.cells和.rows.counmt)