我在工作簿的Sheet1中列出了一些员工编号。在工作簿中还有一些其他工作表(让我们称这些工作表A,B,C,D等),其中包含具有一些信息的员工编号(可能是工作日期)。如果在工作表A中找到了员工编号,它将不在任何其他工作表中,但它可能会在工作表A中多次出现。
我写了一些VBA,它将查看Sheet1中列出的员工编号的所有其他工作表,并返回找到该员工编号的位置的单元格位置。员工编号列在A列中,从A2开始,它列出了员工编号右侧找到编号的位置。 How Sheet1 looks Sheet "A"
现在,当我运行我的VBA宏时,它会列出找到该员工编号的所有单元格位置,但我想要它做的是给我这个员工编号的第一个实例的单元格位置。然后,转到Sheet1的colmn A中列出的下一个员工编号。这是我到目前为止的VBA。
Sub makeMySearch()
Dim ws As Worksheet, lastrow As Long
For Each cell In Sheets("Sheet1").Range("A2:A" & Sheets("Sheet1").Range("A1").End(xlDown).Row)
recFound = 0
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Sheet1" Then
lastrow = Sheets(ws.Name).Range("A1").End(xlDown).Row
For Each cell2 In Sheets(ws.Name).Range("A1:A" & lastrow)
If InStr(cell2.Value, cell.Value) <> 0 Then
recFound = recFound + 1
cell.Offset(0, recFound) = Split(cell2.Address, "$")(1) & Split(cell2.Address, "$")(2)
End If
Next cell2
End If
Next ws
Next cell
MsgBox "Done Finding!"
End Sub
答案 0 :(得分:0)
此方法将在第一次查找时停止(通过Exit For
)
它还显示了一种更有效的方法,而不是循环每张纸上的所有单元格
Sub makeMySearch()
Dim cell As Range, cell2 As Range
Dim ws As Worksheet, lastrow As Long, recFound As Long
Dim rw As Variant
Dim dat As Variant, i As Long
With Worksheets("Sheet1")
dat = .Range(.Cells(2,1), .Cells(.Rows.Count,1).End(xlUp)).Value
For i = 1 To UBound(dat, 1)
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Sheet1" Then
rw = Application.Match( dat(i, 1) , ws.Columns(1), 0)
If Not IsError(rw) Then
.Cells(i+1, 2) = "A" & rw
' Option: show Sheet name and cell
'.Cells(i+1, 2) = ws.Name & "!A" & rw
Exit For
End If
End If
Next ws
Next
End With
MsgBox "Done Finding!"
End Sub
答案 1 :(得分:0)
如果您说Sheet1上的A列是标题行而数据从第2行开始,您只需要编辑以下行:
dat = .Range(.Cells(1,1),。Cells(2,1).End(xlDown))。Value
是:
dat = .Range(.Cells(2,1),。Cells(2,1).End(xlDown))。Value