Vba 使用循环将值从一个工作表替换为另一个工作表
我需要一种方法将主工作表(main)中的值替换为辅助工作表(update)中的值 我的主要工作表有以下列名:EmpName、EmpID、Emp主管、Emp主管 和我的第二个工作表:EmpName、EmpID、newsup、NewDir、Status 如果第二张工作表中的条目状态列为“不匹配”,它将自动传递带有相应EmpID的“新sup”和/或“新dir”数据,并覆盖主工作表中的“empsupervisor”和/或“empdirector” 类似这样的东西,我就是不能用vba能够理解的正确语法来表达Vba 使用循环将值从一个工作表替换为另一个工作表,vba,excel,Vba,Excel,我需要一种方法将主工作表(main)中的值替换为辅助工作表(update)中的值 我的主要工作表有以下列名:EmpName、EmpID、Emp主管、Emp主管 和我的第二个工作表:EmpName、EmpID、newsup、NewDir、Status 如果第二张工作表中的条目状态列为“不匹配”,它将自动传递带有相应EmpID的“新sup”和/或“新dir”数据,并覆盖主工作表中的“empsupervisor”和/或“empdirector” 类似这样的东西,我就是不能用vba能够理解的正确语法来表
for each STATUS = Mismatch in worksheet2
update worksheet1.column("Empsupervisor") with worksheet2.column("New Sup").value
where worksheet1.column("EmpID") = worksheet2.column("EmpID")
next
此方法在所有行中循环,检查不匹配,查找员工ID行,然后将新主管和新主管移至第一页:
Sub TestIt()
Dim LastRow As Long, CurRow As Long, DestRow As Long, DestLast As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Name of main worksheet")
Set ws2 = Sheets("Name of secondary worksheet")
LastRow = ws2.Range("B" & Rows.Count).End(xlUp).Row
DestLast = ws1.Range("B" & Rows.Count).End(xlUp).Row
For CurRow = 2 To LastRow 'Assumes first row has headers
If ws2.Range("E" & CurRow) = "mismatch" Then 'Assumes mismatch is in column E
If Not ws1.Range("B2:B" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
DestRow = ws1.Range("B2:B" & DestLast).Find(ws2.Range("B" & CurRow).Value, LookIn:=xlValues, LookAt:=xlWhole).Row
End If
ws1.Range("C" & DestRow).Value = ws2.Range("C" & CurRow).Value 'assumes supervisor is in column C in both sheets
ws1.Range("D" & DestRow).Value = ws2.Range("D" & CurRow).Value 'assumes director is in column D in both sheets
End If
Next CurRow
End Sub
最后一行的说明:
Range(“B”和Rows.Count)
转到工作表上的最后一行,即Excel“07”、“10”和“13”中的第1048576行。想象一下范围(“B1048576”)
。然后它执行End(xlUp)
,根据MSDN,“相当于按End+UP箭头”。这将转到B列中B1048576上方非空白的第一个单元格。最后一个命令.Row
返回单元格的行号
DestRow
说明:
我们正在使用Range.Find()
方法来确定employeeID是否存在于第一个工作表中以及它存在于哪一行Range.Find()
返回一个范围,这就是为什么我使用Range.Find().Row
的原因,因为当找到时,我们想知道要查找的行。但是,如果Find()
没有找到任何内容,它将返回Nothing
和Nothing。行
将出错。因此,我快速执行If Not Find()Nothing
以确保找到值
嗨,克里斯,你能解释一下lastrow和destlast做什么吗?我觉得它的工作原理有点混乱。谢谢你的快速更新,嗯,还有一个问题,如果没有声明,嗯,你能把它也分解一下吗?谢谢,我花了一个小时试着把它进一步分解,如果没有的话。那么你能进一步解释它的作用吗?我可以看到它在两张纸上比较B列,但为什么它在最后计数?(.排)?