我有一个excel工作表(" Sheet1"),我需要与另一个工作表进行比较(" Sheet2")。
两个工作表的格式完全相同。 (即列相同,标题相同)
将Sheet1与Sheet2进行比较时,我需要检查现有记录的更新。
同时检查Sheet2中不存在于Sheet1中的新记录,并将它们附加到Sheet1的底部。
工作表2中的某些列完全空白,不需要进行检查。
第2列将是" Key"
另请注意,每个工作表中有超过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
答案 0 :(得分:0)
尝试使用dictionary对象时,它没有限制它可容纳的数量(仅限于您的计算机)
我将循环遍历sheet1,将每个键添加到字典中并将其映射到存储rowIndex和从行值制作的散列的集合。然后遍历sheet2中的键,查看字典中是否存在每个键;如果没有,请将行复制到sheet1。如果密钥确实存在,则对sheet2中的行进行散列并与字典项进行比较,如果它们不同,则表示您需要更新该行。
要复制行并快速粘贴它,您只需访问ow的value2属性即可。在更新
时追加+时这将非常有用这里有一些测试代码可以帮助您入门。
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
以字符串形式获取行:
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
Here是从字符串中获取哈希值的帖子,包括vba代码:
我列出的所有步骤都有很多支持它们的帖子,所以资源不会成为问题
答案 1 :(得分:0)
我经常在这个论坛上重复这个:),但是,这样的操作使用SQL更容易处理。
我要么使用Microsof Query(Excel数据 - >获取外部数据 - >来自其他来源 - >来自Microsoft Query)或者我建议使用我的SQL加载项到Excel:http://blog.tkacprow.pl/?page_id=130
似乎您需要使用JOIN运算符来查找表单1和表单2之间的更改。然后使用UNION运算符连接第二个SELECT和LEFT OUTER JOIN以添加其他新行。