我需要我的宏来查看我的范围内的单元格,在不同的WS中找到该值并将值粘贴到我正在寻找的值旁边(我的原始WS)。一次又一次地对范围内的值执行此操作。
现在一切正常但是由于某种原因,该值会停留在第一次搜索上,并且不会在原始范围内查找其他值。 这是我的代码,图片应该有所帮助。
Sub Macro1()
” '现在我要将“UDD”与“S / O”相匹配
Worksheets("Sheet1").Activate
Range("c17").Select
Dim Searchkey As Range, cell As Range
Set Searchkey = Range("c17:c160")
For Each cell In Searchkey
Sheets("data").Activate
Cells.Find(What:=Searchkey, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell.Offset(0, -1).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Range("A1").Select
Selection.Copy
Next cell
End Sub
为什么我的宏停留在“84225”而没有循环到另一个S / O?
答案 0 :(得分:1)
Sub mac1()
Worksheets("Sheet1").Activate
Range("c17").Select
Dim srch As Range, cell As Variant
Set srch = Range("c17:c160")
For Each cell In srch
Sheets("data").Activate
Cells.Find(What:=cell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, -1).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Activate
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Range("A1").Select
Selection.Copy
Next cell
End Sub
这是有效的! 谢谢大家答案 1 :(得分:0)
在每个循环中,您都在搜索SearchKey
的整个范围,而不仅仅是Cell
,因此我猜测它始终使用SearchKey中的第一个单元格作为你的搜索条件。
您还在搜索公式而不是值,并查找可能返回错误结果的零件匹配(20上的零件匹配将返回20,201,11120001中的查找等)。
不对您的工作表名称进行限定,使用Activate可能也没有多大帮助。
试试这段代码:
Public Sub Test()
Dim SrcSht As Worksheet, TgtSht As Worksheet
Dim SearchKey As Range, Cell As Range
Dim FoundValue As Range
With ThisWorkbook
Set SrcSht = .Worksheets("Sheet1")
Set TgtSht = .Worksheets("Data")
End With
Set SearchKey = SrcSht.Range("C17:C21")
For Each Cell In SearchKey
'Search column 3 (C) for your the value
Set FoundValue = TgtSht.Columns(3).Find(What:=Cell, _
After:=TgtSht.Columns(3).Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext)
'Only proceed if value found, otherwise an error will occur.
If Not FoundValue Is Nothing Then
Cell.Offset(, 1) = FoundValue.Offset(, 1)
End If
Next Cell
End Sub
修改强>
要测试代码,请将光标放在过程中,然后按F8依次处理每一行。 FoundValue
每次执行时都应包含一个值。
要检查此项,请将光标悬停在变量上以查看其值:
以黄色突出显示的行是将要执行的下一行。如果FoundValue
什么都不是,那么以下行就不会被处理,如果它不是什么都行,那么就行了。