用1个工作表中的值replace成另一个循环

我需要一种方法来replace我的主工作表(主)中的值与来自我的辅助工作表(更新)的值。

我的主要工作表有这些列名:EmpName,EmpID,EmpSupervisor,Emp Director。

和我的辅助工作表:EmpName,EmpID,New Sup,NewDir,Status。

如果第二个工作表中的条目的状态列为“不匹配”,它将自动将“new sup”和/或“new dir”数据与相应的EmpID一起传递,并在主数据库中覆盖“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 

此方法循环遍历所有行,检查不匹配,find员工ID行,然后将新的主pipe和新主pipe移到第一个表中:

 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 

LastRow解释:

Range("B" & Rows.Count)转到Excel '07,'10和'13行1,048,576行中的最后一行。 所以想象一下Range("B1048576") 。 然后根据MSDN执行“等同于按END + UP ARROW”的 End(xlUp) 。 这将转到B1048576上面的非空白栏中的第一个单元格。 最后一个命令.Row返回单元格的行号。

DestRow解释:

我们使用Range.Find()方法来确定employeeID是否存在于第一个工作表中,以及它存在于哪一行。 Range.Find()返回一个范围,这就是为什么我使用Range.Find().Row因为当find,我们想知道我们要去的行。 但是,如果Find()没有find任何内容,则返回NothingNothing.Row将会报错。 因此,我做了一个快速If Not Find() Nothing确定的价值被发现。