我需要一种方法来替换主要工作表(主要)中的值和我的辅助工作表(更新)中的值。
我的主要工作表有以下列名:EmpName,EmpID,EmpSupervisor,Emp Director。
和我的辅助工作表:EmpName,EmpID,New Sup,NewDir,Status。
如果第二个工作表中的条目将STATUS列为"不匹配",它将自动传递"新的"和/或"新目录"数据与相应的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
答案 0 :(得分:-1)
此方法遍历所有行,检查不匹配,找到员工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
LastRow
的解释:
Range("B" & Rows.Count)
转到表格的最后一行,即Excel' 07,' 10和' 13中的行1,048,576。想象一下Range("B1048576")
。然后它执行End(xlUp)
"相当于根据MSDN按END +向上箭头" 。这将转到B列中的第一个单元格,它在B1048576之上是非空白的。最后一个命令.Row
返回该单元格的行号。
DestRow
的解释:
我们使用
Range.Find()
方法来识别employeeID是否存在于第一个工作表中以及它存在于哪一行。Range.Find()
返回一个范围,这就是我使用Range.Find().Row
的原因,因为一旦找到,我们就想知道我们要去的那一行。但是,如果Find()
找不到任何内容,则会返回Nothing
,而Nothing.Row
会出错。因此,我会快速If Not Find() Nothing
以确保找到该值。