请帮我处理一下 Excel 电子表格。我有两个工作表,一个保存旧记录,另一个保存当前记录。我希望开发一个与命令按钮关联的 VBA 代码,见下面的示例,这样当单击按钮时,旧记录中的值将根据新记录中的值自动更新。为了清楚起见,这里是工作表的快照。
Sheet1 包含旧记录,这些记录是实时的并且可以被 100 多个用户查看。Sheet2 包含新记录,这些记录从各种来源进行更新,并且任何字段/列都可以由字段用户更改。
两个工作表中的字段 1 都包含主要控制字段。因此,我想要做的是获取 Sheet2 中字段 1 的每个值,然后在 Sheet1 的字段 1 中搜索该值,如果该值存在,我想要比较所有相应的记录,以便将 Sheet2 中的所有字段的任何差异复制到 Sheet1。如果该值根本不在 Sheet1 中,我想要将 Sheet2 中的所有值和所有相关记录复制到 Sheet1。我总是想要根据 Sheet2 中的新更新不断更新 Sheet1。
我希望我说得足够清楚。请注意,示例表只是一个简化版本,因为表中有 75 个字段/列和超过 70,000 条记录。
感谢您为实现这一目标所提供的帮助和支持。
**SHEET1**
Field1 Field2 Field3 Field4
Radms Street 781772 2 76
Mapre Street 781772 31 76
Catapilar Av 781727 1 90
Aveb Park 781727 56 91
**SHEET2**
Field1 Field2 Field3 Field4
Aveb Park 781727 56 91
Radms Street 781770 2 76
Solution Way 761111 67 1
Aknyt Road 781720 91 90
Mapre Street 781772 31 76
weedred Park 781781 23 61
Raven Road 781781 76 61
Catapilar Av 781720 21 76
答案1
此 VBA 可以工作,只需调整单元格范围,这样它就不会无限期地运行。还可以调整 for 循环i
以反映您有多少个字段。
此 VBA 假定两个工作表中的值的顺序相同,并且不会替换空白,但也会不比较值。
Sub comparesheets()
Application.ScreenUpdating = False
Dim c As Range
Dim strFind As String
Dim rFound As Range
Dim i As Integer
For Each c In Sheets("sheet1").Range("A:A")
strFind = c.Value
With Sheets("Sheet2").Range("A:A")
Set rFound = .Find(What:=strFind, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not rFound Is Nothing Then
For i = 1 To 4
If rFound.Offset(, i) <> "" Then
c.Offset(, i) = rFound.Offset(, i)
End If
Next i
End If
End With
Next c
Application.ScreenUpdating = True
End Sub