Vba 如何使用宏将现有数据从Sheet1更新到Sheet2?

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

我只是想问有没有人有这个密码。 我在Sheet2中保存了一个数据,我想使用Sheet1中的新数据进行更新。在下面的示例中,当我单击“更新”按钮时,代码将在Sheet2中搜索族“Oh”,并使用Sheet1中的更新信息更新其详细信息。以下是

表1:

第2张:

尝试了此代码,但无法使其正常工作

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,还是只需要一个简单的数据库表:)