我在Sheet1 column D中有一个地方列表,在Sheet1 column E中有一个原始值列表。在某些位置之间有空白行,并且某些位置是重复的。

我在Sheet2 Column F中有一个简短的位置列表(数据中有1个空白行),在Sheet2 column G中,我可以为每个位置添加新的校正值。

计划是要有一个脚本,该脚本将在每次我在Sheet2 column G中添加新值时运行。我希望可以通过excel vba Events来实现。假设我更新了G5,脚本将在Sheet2 F5中找到Sheet1 D:D,然后用新的Sheet1 E:E值替换Sheet2 G5中的相应值:

这是我尝试的一些代码,但是我仍然不确定1)如何使它起作用,以及2)每当我在Sheet2 G:G中更新值时如何使其起作用?任何帮助将非常感激。

Sub CorrectingValues()

Dim i As Long
Dim lstrw As Long
Dim newval As Range

Sheets("Sheet1").activate
lstrw = Cells(Rows.Count, "D").End(xlUp).Row
For i = lstrw to 1 Step -1
    If Sheet("2").Cells(i, "G").value <>"" Then
        newval = .Find(Sheets("Sheet2").cells(i, "F") _
                  After:=Sheets("Sheet1").Range("D1") , LookIn:=xlValues)
        Cells(newval, "E").Value = Sheets("2").cells(i,"G")
    End If
Next i

End Sub

最佳答案

将以下代码放在Sheet2中

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("G:G")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
        enteredvalue = Target.Value
        enteredvaluefind = Cells(Target.Row, Target.Column - 1)
        targetfindrow = Worksheets("Sheet1").Range("D:D").Find(enteredvaluefind).Row
        targetfindcolumn = Worksheets("Sheet1").Range("D:D").Find(enteredvaluefind).Column
        Worksheets("Sheet1").Cells(targetfindrow, targetfindcolumn + 1) = enteredvalue
    End If
End Sub

09-04 15:03