用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任何内容,则返回Nothing
,Nothing.Row
将会报错。 因此,我做了一个快速If Not Find() Nothing
确定的价值被发现。