Vba 如何使用宏将现有数据从Sheet1更新到Sheet2?
我只是想问有没有人有这个密码。 我在Sheet2中保存了一个数据,我想使用Sheet1中的新数据进行更新。在下面的示例中,当我单击“更新”按钮时,代码将在Sheet2中搜索族“Oh”,并使用Sheet1中的更新信息更新其详细信息。以下是 表1: 及 第2张: 尝试了此代码,但无法使其正常工作Vba 如何使用宏将现有数据从Sheet1更新到Sheet2?,vba,excel,Vba,Excel,我只是想问有没有人有这个密码。 我在Sheet2中保存了一个数据,我想使用Sheet1中的新数据进行更新。在下面的示例中,当我单击“更新”按钮时,代码将在Sheet2中搜索族“Oh”,并使用Sheet1中的更新信息更新其详细信息。以下是 表1: 及 第2张: 尝试了此代码,但无法使其正常工作 Sub FindValues() Dim lookUpSheet As Worksheet, updateSheet As Worksheet Dim valueToSearch As String
Sub FindValues()
Dim lookUpSheet As Worksheet, updateSheet As Worksheet
Dim valueToSearch As String
Dim i As Integer, t As Integer
Set lookUpSheet = Worksheets("sheet1")
Set updateSheet = Worksheets("sheet2")
'get the number of the last row with data in sheet1 and in sheet2
lastRowLookup = lookUpSheet.Cells(Rows.Count, "A").End(xlUp).Row
lastRowUpdate = updateSheet.Cells(Rows.Count, "A").End(xlUp).Row
'for every value in column A of sheet2
For i = 1 To lastRowUpdate
valueToSearch = updateSheet.Cells(i, 1)
'look the value in column A of sheet1
For t = 1 To lastRowLookup
'if found a match, copy column B value to sheet1 and proceed to the next value
If lookUpSheet.Cells(t, 1) = valueToSearch Then
updateSheet.Cells(i, 2) = lookUpSheet.Cells(t, 2)
Exit For
End If
Next t
Next i
End Sub
提前感谢您的帮助以下内容应满足您的期望,我已对代码进行了注释,以便您了解它的功能:
Sub FindValues()
Dim lookUpSheet As Worksheet, updateSheet As Worksheet
Dim valueToSearch As String
Dim i As Long, t As Long
Set lookUpSheet = Worksheets("Sheet1")
Set updateSheet = Worksheets("Sheet2")
lastRowLookup = lookUpSheet.Cells(Rows.Count, "A").End(xlUp).Row
lastRowUpdate = updateSheet.Cells(Rows.Count, "A").End(xlUp).Row
'get the number of the last row with data in sheet1 and in sheet2
For i = 2 To lastRowLookup 'i = 2 to last to omit the first row as that row is for headers
valueFamily = lookUpSheet.Cells(i, 1) 'Family, 1 = Column A
valueDOB = lookUpSheet.Cells(i, 2) 'DOB, 2 = Column B
valueName = lookUpSheet.Cells(i, 3) 'Name, 3 = Column C
valueAge = lookUpSheet.Cells(i, 4) 'Age, 4 = Column D
'above get the values from the four column into variables
For t = 2 To lastRowUpdate 't = 2 to last to omit the first row as that row is for headers
If updateSheet.Cells(t, 1) = valueFamily And updateSheet.Cells(t, 2) = valueDOB And updateSheet.Cells(t, 3) = valueName Then
'if family, dob and name match, then
updateSheet.Cells(t, 4) = valueAge
'update age value
Exit For
End If
Next t
Next i
End Sub
这可以在不使用变量和比较单元格的情况下缩短,如下所示:
Sub FindValues()
Dim lookUpSheet As Worksheet, updateSheet As Worksheet
Dim i As Long, t As Long
Set lookUpSheet = Worksheets("Sheet1")
Set updateSheet = Worksheets("Sheet2")
lastRowLookup = lookUpSheet.Cells(Rows.Count, "A").End(xlUp).Row
lastRowUpdate = updateSheet.Cells(Rows.Count, "A").End(xlUp).Row
'get the number of the last row with data in sheet1 and in sheet2
For i = 2 To lastRowLookup 'i = 2 to last to omit the first row as that row is for headers
For t = 2 To lastRowUpdate 't = 2 to last to omit the first row as that row is for headers
If updateSheet.Cells(t, 1) = lookUpSheet.Cells(i, 1) And updateSheet.Cells(t, 2) = lookUpSheet.Cells(i, 2) And updateSheet.Cells(t, 3) = lookUpSheet.Cells(i, 3) Then
'if family, dob and name match, then
updateSheet.Cells(t, 4) = lookUpSheet.Cells(i, 4)
'update age value
Exit For
End If
Next t
Next i
End Sub
您遇到的问题是,您需要让IF语句查看前3个单元格,而不是单个值,因此在条件和条件之间比较所有三个单元格。这是如何使用adodb更新为sql的
Sub UpdateSQL()
Dim Cn As Object
Dim strConn As String, Name As String
Dim Ws As Worksheet
Dim strSQL As String
Dim i As Integer
Dim vDB
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 12.0;"
Set Ws = Sheets(1)
Name = Sheets(2).Name
With Ws
vDB = .Range("a2", .Range("d" & Rows.Count).End(xlUp))
End With
Set Cn = CreateObject("ADODB.Connection")
Cn.Open strConn
For i = 1 To UBound(vDB, 1)
strSQL = "UPDATE [" & Name & "$] set Age=" & vDB(i, 4) & " where Family = '" & vDB(i, 1) & "' AND DOB =#" & vDB(i, 2) & "# AND Name='" & vDB(i, 3) & "' "
Cn.Execute strSQL
Next i
Cn.Close
Set Cn = Nothing
End Sub
您是否至少尝试过修改代码以反映您希望在3列上匹配的事实(或者,至少,我假设您这样做了),以及您希望更新D列而不是B列的事实?如果是这样的话,请发布你尝试过的代码。这是这个网站的原始代码,我也尝试过修改它,但它每栏只更新1条信息。意味着它将更新D列中的11而不是11、12、13、15。您是否至少尝试修改代码以反映您希望在3列上匹配的事实,即您是否尝试检查三列(A、B和C)是否都匹配,或者,您是否期望仅仅因为选中了列A,就会自动发生这种情况?您真的不应该只是复制/粘贴(尤其是在没有属性的情况下)并说“无法使其正常工作”是的,我试着修改它,就像我说的那样,结果并不像我预期的那样。我试图更改A B C列,但结果相同。我只是看到了答案,然后试了一下密码。我只进行了一次搜索和替换,但如果表包含多个可搜索项,它将只使用相同的数据替换所有信息。因此,如果我运行宏,而不是让D列中的年龄为11、12、13、15,它将取代年龄为11、11、11、11:)如果有比这更简单的替代代码,那将非常感谢,因为这是我第一次使用excel vbaWow!这就是我一直在寻找的解释。我现在看到了错误。这就是为什么即使修改代码,我也无法使代码正常工作的原因,因为我太专注于让宏查找姓氏并覆盖信息,而不是让它查看前3个单元格。非常感谢,这真的很有帮助,我真的很感激。我已经修改了5天的代码,并在网上搜索可能的公式,以使其工作,但我仍然无法让它在我这方面的工作。我真的需要学习很多关于excel的东西:)非常感谢你。我将在下一个表单中尝试这段代码,以便了解如何使其与adodb一起工作。我还有很多表单,我会选择哪个表单需要adodb,还是只需要一个简单的数据库表:)