VBA匹配和工作表之间复制单元格值
我有两张工作表,一个标记为“Assignments”,另一个标记为“备份”。我试图实现的是将“分配”信息复制到“备份”以允许输入新数据。但是,一旦复制到“备份”并且新信息被提供给“分配”,我正在循环遍历“备份”列A中的每个项目,并将相邻单元格(B列)复制到相应的单元格值在“作业”中找到。VBA匹配和工作表之间复制单元格值
到目前为止,这是我,但我不返回任何结果可行代码:
Option Explicit
Sub Match()
Dim RNG As Range
Dim RI As Range
Dim WS As Worksheet
Dim f As Range
Set WS = ActiveWorkbook.Sheets("Assignments")
Set RNG = Sheets("Assignments Backup").Range("A2:A400")
For Each RI In RNG
With WS
'RI.Select
Set f = .Columns(1).SpecialCells(xlCellTypeConstants).Find(What:=Cells(Target.Row, 1), LookIn:=xlFormulas, LookAt:=xlWhole) '<--| try finding "Emp #" from Assignments sheet changed cell row column B in referenced sheet ("i.e. "Checklist") column "A" cells not blank cells
If f Is Nothing Then '<--| if "Emp #" match not found
'MsgBox "I couldn't find " & Cells(Target.Row, 1).Value & " in worksheet 'Checklist'"
Else ' <-- if "Emp #" match found
.Range("F:F").Rows(f.Row).Value = Range("F:F").Rows(Target.Row).Value '<--| paste "Assigmnents" sheet changed cell row columns "AA:AF" content in corresponiding columns of referenced sheet ("i.e. "Checklist") row where "Emp #" match was found
End If
End With
Next
End Sub
对于延迟道歉,我已经上传的示例文件到我的谷歌驱动器。 [https://drive.google.com/open?id=0B0jgh8FwPVvkWk40TEczYVFjX0k][1]
正如您会注意到列B包含两张表之间的不同数据。但是,如上所述,我希望备份中B列的信息根据列A中的数据替换分配B列中的内容。我还包括下面的代码。
编辑 我更新了上面的代码,因为我意识到我没有发布正确的代码,我最初尝试使用。
我亲爱的朋友,你的“代码”是一团糟 - 这是一个非常有礼貌的方式。我花了半个小时才把它清理干净。但那只是为了让问题可见。
Sub MatchEntries()
Dim WsA As Worksheet ' Worksheet "Assignments"
Dim WsB As Worksheet ' Worksheet "Assignments Backup"
Dim WsC As Worksheet ' Worksheet "Checklist"
Dim Cell As Range ' Cells in RngA
Dim Fnd As Range ' Find match
Dim R As Long, C As Long ' row and column
With ActiveWorkbook
Set WsA = .Worksheets("Assignments")
Set WsB = .Worksheets("Assignments Backup")
Set WsC = .Worksheets("Checklist")
End With
For Each Cell In WsB.Range("A2:A400")
Set Fnd = WsC.Columns(1).Find(What:=Cell.Value, LookIn:=xlFormulas, LookAt:=xlWhole)
' <--| try finding "Emp #" from Assignments sheet changed cell row column B
' in referenced sheet ("i.e. "Checklist") column "A" cells not blank cells
If Fnd Is Nothing Then '<--| if "Emp #" match not found
MsgBox "I couldn't find " & Cell.Value & " in worksheet 'Checklist'"
Else ' <-- if "Emp #" match found
R = Fnd.Row
For C = 27 To 32 ' columns AA to AF
WsA.Cells(R, C).Value = WsC.Cells(R, C).Value
Next C
' .Range("Fnd:Fnd").Rows(Fnd.Row).Value = Range("Fnd:Fnd").Rows(Target.Row).Value
' <--| paste "Assigmnents" sheet changed cell row columns "AA:AF" content
' in corresponiding columns of referenced sheet ("i.e. "Checklist") row
' where "Emp #" match was found
End If
Next Cell
End Sub
首先,不要打电话给你的子“匹配”。 Match
是一个工作表函数,并且不会告诉Excel在遇到“您的”名称选择时将执行什么操作。
其次,你似乎有3张。所以,我宣布3张。从你的文章中无法判断这个假设是否正确,但我相信你可以看到逻辑。另外,一旦你有这么多的变量,你将需要一个有点想象力的名字。你不能打电话给你所有的8个儿子John1,John2,John3等等。同样的道理,我命名了你的一个范围Cell
和另一个Fnd
。你将能够通过他们的名字来区分他们。
现在您可以看到您正在查看“备份”表(列表WsB
)A列中的所有单元格。这看起来不是一个好主意,因为可能会有很多空白单元格。匹配将为他们找到。我冒昧地假设你正在查看清单表。如果这是错误的,现在很容易更改工作表或列。
如果找到匹配项,您想要做某件事。我无法弄清楚你想做什么,但是我在那里写了代码,这些代码应该很容易理解和修改,以便它能够实现你真正想要的。
你可以在之前和之后发布示例数据(电子表格图像)吗? – 0m3r
'对于RNG中的每个RI',则使用'Target.Row' ... ...您的变量名称会令人困惑/困惑。在请求任何进一步帮助之前,请使用'Option Explicit'并验证您的变量是否已正确声明。 –
我尝试过使用'Option Explicit',但它没有解决问题。 –