通过将工作表与其他Worksheet进行比较来更新工作表

我有一个Excel工作表(“Sheet1”),我需要与另一个工作表(“Sheet2”)进行比较。

两个工作表的格式完全一样。 (即列是相同的,具有相同的标题)

当比较Sheet1和Sheet2时,我需要检查现有logging的更新。

还要检查Sheet1中不存在的新logging,并将它们追加到Sheet1的底部。

工作表2中的某些列是完全空白的,不需要检查。

第2列将是“钥匙”

另请注意,每个工作表中有超过7000行。

更新#1:

使用字典对象,我想出了这个。 但是,似乎没有发现任何新的条目。 难道我做错了什么?

Sub createDictionary()Dim dict As Object Set dict = CreateObject(“Scripting.Dictionary”)

Dim maxRows1, maxRows2 As Long Dim i, j As Integer Dim SheetOne, SheetTwo As Worksheet maxRows1 = Sheets("Sheet1").UsedRange.Rows.Count Set SheetOne = Sheet1 Set SheetTwo = Sheet2 For i = 2 To maxRows1 If Not dict.exists(SheetOne.Cells(i, 2).Value + " " + SheetOne.Cells(i, 11).Value) Then dict.Add CStr(SheetOne.Cells(i, 2).Value) + " " + SheetOne.Cells(i, 11).Value, i End If Next i maxRows2 = Sheets("Sheet2").UsedRange.Rows.Count For j = 2 To maxRows2 If Not dict.exists(Sheet2.Cells(j, 2).Value) Then SheetTwo.Range("A" & j & ":" & "Z" & j).Copy SheetOne.Range("A" & maxRows1 + 1).Insert Shift:=xlDown SheetOne.Range("A" & maxRows1 + 1).Interior.Color = RGB(200, 200, 200) End If Next j Set dict = Nothing 

End Sub`

尝试使用一个字典对象,它可以容纳多less没有限制(只限制你的电脑)

我将通过sheet1循环,将每个键添加到字典中,并将其映射到一个集合,该集合存储rowIndex和由行值构成的散列。 然后遍历sheet2中的键并查看每个键是否存在于字典中; 如果不是,则将该行复制到sheet1。 如果键确实存在,那么在sheet2中对行进行散列并与字典项进行比较,如果它们不同,则需要更新该行。

要复制一行并非常快速地粘贴,只需访问ow的value2属性即可。 这在更新时附加+时很有用

这里有一些testing代码,让你开始。

 Sub loopCellInColumn() Dim cell As Object Dim sheet As Worksheet Dim rng As Range Set sheet = ActiveSheet Set rng = sheet.UsedRange.Columns("A").Cells For Each cell In rng Row = cell.Row cell.Value = "Hello World" & Row Next cell End Sub 

并使用字典:

 Sub createDictionary() Dim dict As Object Dim value As Collection Set dict = CreateObject("Scripting.Dictionary") Key = "hello" Set value = New Collection value.Add 100, "row" value.Add "A2D121E4", "hash" dict.Add Key, value MsgBox "key exists: " & dict.exists(Key) & vbNewLine & "value: " & dict(Key).Item("hash") End Sub 

使用value2复制+粘贴:

 Sub test() ActiveSheet.Rows(1).Value2 = ActiveSheet.Rows(2).Value2 End Sub 

作为string获得一行的前:

 Sub getRowAsString() Dim cell As Object Dim sheet As Worksheet Dim str As String Dim arr() As Variant Dim arr2() As Variant Dim printCol As Integer Set sheet = ActiveSheet printCol = sheet.UsedRange.Columns.Count + 1 For Each cell In sheet.UsedRange.Rows arr = cell.Value2 ReDim arr2(LBound(arr, 2) To UBound(arr, 2)) For i = LBound(arr, 2) To UBound(arr, 2) arr2(i) = arr(1, i) Next i str = Join(arr2, ", ") ActiveSheet.Cells(cell.Row, printCol).Value = str Next cell End Sub 

这里是从string获取哈希值的post,包括vba代码:

我列出的所有步骤都有很多支持他们的post,所以资源不会成为问题

我经常在这个论坛上重复这个:),但是,这样的操作使用SQL更容易处理。

我会使用Microsof查询(Excel数据 – >获取外部数据 – >从其他来源 – >从Microsoft Query)或者我build议使用我的SQL 插件到Excel: http : //blog.tkacprow.pl/?page_id= 130

似乎您需要使用JOIN运算符来查找表格1和2之间的更改。然后使用UNION运算符join另一个具有LEFT OUTER JOIN的SELECT以添加额外的新行。